J'ai démarré un projet MVC et créé la classe AccountController pour moi. Donc pour me connecter à mon site actuel, je devrais aller à, localhost: 2500 \ Account.mvc \ LogOnMVC Appel d'une autre action de contrôleurs
Je voulais faire la connexion sur mon HomeController dans la vue Index. Donc, fondamentalement, si vous allez à ma racine du site si non authentifié, vous devrez vous connecter pour aller ailleurs.
Donc ce que j'ai fait était d'ajouter le formulaire à ma vue d'index et j'ai essayé de l'afficher sur mon 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, celui-ci ne s'affiche pas dans la vue Compte et n'exécute donc pas l'action LogOn. Au lieu de cela, il ne fait que publier dans la vue Accueil en appelant à nouveau l'action Index. Donc ça ne fait vraiment rien pour moi ... haha.
Vous ne savez pas ce que je fais mal. Ci-dessous est mon code de forme brut de Home/Index.aspx et puis je vais aussi vous montrer la source après son rendu avant d'appuyer sur le bouton d'ouverture de session.
Voici mon code d'Accueil/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>
<% } %>
Afficher 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>
Je mets un point de rupture à mon action LogOn et il ne fait jamais hit, donc ce n'est pas une erreur de connexion non plus.
Il semble que l'action dans la source html est correctement définie, je ne comprends tout simplement pas pourquoi il ne publie pas correctement. Je ne fais pas quelque chose de bien. S'il vous plaît laissez-moi savoir si vous avez des idées. Merci!
LogOn action dans la vue 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");
}
}
l'avez-vous essayé sans le slash au début de l'action? –
@mrinject Si MVC a rendu la route avec la barre oblique, vous vous attendez sûrement à ce qu'elle soit correcte? –
Yea MVC a rendu ce html ici, puisque j'utilise BeginForm() avec params ... – Gabe