J'ai lancé un projet MVC et il a créé la classe AccountController pour moi. Ainsi, pour me connecter à mon site actuel, je dois me rendre sur localhost:2500. \Account.mvc\LogOn
Je voulais faire le login sur mon HomeController dans la vue Index. Ainsi, si vous allez à la racine du site et que vous n'êtes pas authentifié, vous devez vous connecter pour aller ailleurs.
J'ai donc ajouté le formulaire à ma vue Index et j'ai essayé de l'envoyer à ma vue Account en appelant l'action LogOn. vue Compte en appelant l'action LogOn.
J'ai appelé la méthode BeginForm en lui passant mon action et la vue respective (LogOn, Account). Lorsque je clique sur le bouton, il ne s'affiche pas dans la vue Account et n'exécute donc pas l'action LogOn. Au lieu de cela, il affiche simplement la vue Accueil en appelant à nouveau l'action Index. Cela ne m'apporte donc rien... haha.
Je ne suis pas sûr de ce que je fais mal. Vous trouverez ci-dessous le code brut de mon formulaire à partir de Home/Index.aspx, puis je vous montrerai également le code source une fois qu'il aura été rendu avant d'appuyer sur le bouton d'ouverture de session.
Voici mon code à partir de Home/Index.aspx :
<% using (Html.BeginForm("LogOn", "Account")) { %>
<div>
<fieldset>
<legend>Account Information</legend>
<p>
<label for="username">Username:</label>
<%= Html.TextBox("username") %>
<%= Html.ValidationMessage("username") %>
</p>
<p>
<label for="password">Password:</label>
<%= Html.Password("password") %>
<%= Html.ValidationMessage("password") %>
</p>
<p>
<%= Html.CheckBox("rememberMe") %> <label class="inline" for="rememberMe">Remember me?</label>
</p>
<p>
<input type="submit" value="Log On" />
</p>
</fieldset>
</div>
<% } %>
Voir la source de Home.mvc/Index :
<form action="/Account.mvc/LogOn" method="post">
<div>
<fieldset>
<legend>Account Information</legend>
<p>
<label for="username">Username:</label>
<input id="username" name="username" type="text" value="" />
</p>
<p>
<label for="password">Password:</label>
<input id="password" name="password" type="password" />
</p>
<p>
<input id="rememberMe" name="rememberMe" type="checkbox" value="true" /><input name="rememberMe" type="hidden" value="false" /> <label class="inline" for="rememberMe">Remember me?</label>
</p>
<p>
<input type="submit" value="Log On" />
</p>
</fieldset>
</div>
</form>
J'ai défini un point d'arrêt au niveau de mon action de connexion et il n'est jamais atteint, donc ce n'est pas non plus une erreur de connexion.
Il semble que l'action dans la source html soit correctement définie, mais je ne comprends pas pourquoi elle ne s'affiche pas correctement. Je ne fais pas quelque chose de correct. Faites-moi savoir si vous avez des idées. Merci.
Action de connexion dans la vue du compte :
[AcceptVerbs(HttpVerbs.Post)]
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1054:UriParametersShouldNotBeStrings",
Justification = "Needs to take same parameter type as Controller.Redirect()")]
public virtual ActionResult LogOn(string userName, string password, bool rememberMe, string returnUrl)
{
if (!ValidateLogOn(userName, password))
{
return View();
}
FormsAuth.SignIn(userName, rememberMe);
if (!String.IsNullOrEmpty(returnUrl))
{
return Redirect(returnUrl);
}
else
{
return RedirectToAction("Index", "Home");
}
}