2017-09-28 2 views
0

J'ai une page de connexion très simple. Le problème est dans la méthode de connexion. J'exécute RedirectToAction, cependant, il ne change jamais la page Web de la page de connexion à la page d'accueil.La redirection de rasoir contient des comportements inattendus

HomeController (contrôleur principal d'application)

public ActionResult Index(string username = null, string password = null) 
    { 
     if (username == null || password == null) 
     { 
      return RedirectToAction("Index", "Auth"); 
     } 

     this.username = username; 
     this.password = password; 

     return View(); //and have tried return View("Index"); 
    } 

AuthController (saisit le nom d'utilisateur et mot de passe)

public ActionResult Login(string username, string password) 
    {   
     return RedirectToAction("Index","Home", new { username=username,password=password}); 
    } 

Appuyez sur le bouton

function Login() { 
    var _get_searchdetails = '@Url.Action("Login", "Auth")'; 
    $.ajax({ 
    url: _get_searchdetails, 
    data: { username: $('#username').val(), password: $('#password').val() }, 
    type: "POST", 
    beforeSend: function() { 

    }, 
    error: function (xhr, textStatus, error) { 
     alert("Try again!"); 
    }, 
    success: function (htmldata, xhr, settings) { 

    } 
    }); 
} 
+1

type ': "GET", '* \ * GASP * * – adiga

+0

champs de réglage du contrôleur ne va pas fonctionner, car le contrôleur est instancié et disposé à chaque demande. La prochaine requête que vous faites, 'username' et' password' sera à nouveau nulle. –

+0

Oui, je les sauvegarde ... Session ["username"] = login.username; AND Session ["mot de passe"] = login.password; Merci quand même! – Rob

Répondre

0

Il est en fait pas clair ce que vous essayez de faites ici, car votre code de méthode d'action n'a pas de sens.

Mais la meilleure option ici peut être utiliser RedirecToAction method en spécifiant le contrôleur et le nom d'action avec les paramètres de celui-ci comme:

return RedirectToAction("Index","Home", new { username=username,password=password}); 

et vous ne devriez pas utiliser Get demande de passer le nom d'utilisateur et mot de passe à l'action méthode, car il est très vulnérable aux pirates pour pirater l'application Web facilement.

Espérons que ça aide!

+0

Fait quelques mises à jour. J'essaie de faire une page de connexion simple pour saisir les informations d'identification des utilisateurs pour usurper l'identité en aval. Le problème est une fois que RedirectToAction comme vous l'avez mentionné est exécuté, il reste à la vue de connexion. – Rob

0

J'ai trouvé mon problème. J'avais besoin de faire ceci au lieu d'une requête ajax.

 @using (Html.BeginForm("Login", "Auth")) 
     { 
      <label for="username">Username</label> 
      <input type="text" id="username" name="username"/> 
      <br /> 
      <label for="username">Password</label> 
      <input type="password" id="password" name="password"/> 

      <input type="submit" value="Create" /> 
     } 
+0

Si vous souhaitez conserver le comportement ajax, vous pouvez renvoyer un URL dans la réponse et rediriger le navigateur vers cette URL à partir de javascript (quelque chose comme 'location = response.url'). Mais en général, il n'est pas nécessaire de «POST» en utilisant ajax dans ce genre de scénario. – Extragorey

+0

Non, je n'avais vraiment pas besoin de l'ajax. Je ne savais pas exactement ce que je cherchais pour le faire fonctionner. Je n'ai jamais utilisé Razor 5 auparavant et j'essayais d'écrire du code et de l'apprendre en même temps, ce qui ne fonctionne pas toujours bien. – Rob