2009-09-22 6 views
1

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"); 
      } 
     } 
+0

l'avez-vous essayé sans le slash au début de l'action? –

+0

@mrinject Si MVC a rendu la route avec la barre oblique, vous vous attendez sûrement à ce qu'elle soit correcte? –

+0

Yea MVC a rendu ce html ici, puisque j'utilise BeginForm() avec params ... – Gabe

Répondre

2

Pouvez-vous confirmer que /Account.mvc/LogOn est un itinéraire valide?

choses à vérifier:

  • est l'itinéraire valide?

  • Est-ce que l'action LogOn ont ActionVerb sur elle, ce qui empêche les demandes post - telles que: [ActionVerbs (HttpVerbs.Get)]

Edit: En regardant votre code, sans tenir compte du fait que le point d'arrêt. être redirigé vers la page d'accueil, puisque vous ne passez pas l'URL de retour, ne va-t-il pas vous renvoyer à la page d'accueil quand elle a réussi?

Mettez ceci dans votre page maître. Que retourne-t-il?

<%=Request.IsAuthenticated %> 

Edit 2:

Apparemment, cela retourne faux.

Ok ... Donc, le contrôleur est correct, et la vue semble correcte, et rend l'URL correcte ... Je suppose que ASP.NET MVC est installé et est dans le GAC, étant donné que vous pouvez également parcourir à d'autres URLs telles que LogOn directement. Et il semble que vous l'exécutiez sous Windows XP, étant donné le '.mvc' dans la route.

À quoi ressemblent vos itinéraires? Avez-vous fait des changements à eux?

+0

Oui, ceci est une route valide. Je peux certainement y aller directement dans mon navigateur ... localhost: 2500 \ Account.mvc \ LogOn – Gabe

+0

Donc, il accepte aussi les requêtes GET? Qu'en est-il du POST? Y a-t-il des ActionVerbs dessus? –

+0

Oui l'action LogOn a le ActionVerb. Je posterai cette action ci-dessus pour référence. – Gabe

Questions connexes