ASP.NET MVC 4 Par défaut _LoginPartial template Déconnexion ne fonctionne pas

J'ai été en train de jouer avec _Layout et _PartialLayouts des modèles MVC 4 par défaut et soudain, la fonctionnalité 'Déconnexion' dans '_PartialLogin' doc a stopeed working. Pour vous donner plus d'informations, le _LoginPartial.cshtml est appelé à partir du _NavBar.cshtml qui à son tour est appelé à partir de _Layout.cshtml

Le code du _LoginPartial.cshtml est:

@if (Request.IsAuthenticated) { <text> <p>Hello, @Html.ActionLink(User.Identity.Name, "Manage", "Account", routeValues: null, htmlAttributes: new { @class = "username", title = "Manage" })! @using (Html.BeginForm("LogOff", "Account", FormMethod.Post, new { id = "logoutForm" })) { @Html.AntiForgeryToken() <a href="javascript:document.getElementById('logoutForm').submit()">Log off</a> }</p> </text> } 

Le code de _NavBar.cshtml est:

 <form class ="navbar-form navbar-right" method="post" action="/account/login"> <div class ="form-group"> @Html.Partial("_LoginPartial") </div> </form> 

Le code du _Layout.cshtml est:

 <body> @Html.Partial("_Navbar") @RenderSection("featured", required: false) @RenderBody() <div class="container"> 

Je comprends que peut-être que le problème est que le javascript a été désactivé de façon non intentionnelle en quelque sorte. Est-ce que je manque des étiquettes de script peut-être? Ou est-ce quelque chose dans la classe précédente où j'ai appelé le _PartialLogin de ??

Je ne réponds pas à votre question ( vous avez déjà résolu le problème ) mais je pense que cela améliore grandement le code:

Changez cette ligne:

 <a href="javascript:document.getElementById('logoutForm').submit()">Log off</a> 

avec celui-ci:

 <button class="btn btn-link">Log off</button> 

L'ID sur le formulaire n'est donc pas nécessaire avec cette modification.

Résolu le problème…

Vous ne pouvez pas placer le texte javascript dans une <form> . Cela ne fonctionnera pas, car le bootstrap le dérangera alors.

Cela ne compte pas combien de fois vous appelez les couches partielles entre vous – faites attention à quelles étiquettes vous insérez le javascript dans

J'ai aussi eu ce problème – car nous utilisons également bootstrap.

Cela a bien fonctionné dans Chrome:

<a href="javascript:document.getElementById('logoutForm').submit()">Log off</a>

Mais pour le faire fonctionner sur Explorer, la solution était de déplacer le javascript vers l'attribut onclick:

<a href="#" onclick="javascript:document.getElementById('logoutForm').submit()">Log off</a>

https://stackoverflow.com/a/17078223