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>