2010-02-26 3 views
0

compte sera ouvert comme d'habitude:RedirectToRoute (« Default ») Non Réorientation, retour HTML de LogOn PartialViewResult Au lieu

public ActionResult Index() 
    {    
     return View(); 
    } 

cela va rendre le gabarit de vue suivant: (car à ce stade, il n'y a pas CurrentUser, ' utilisateur » est nulle, donc il fonctionne Html.RenderAction("LogOn", "Account");)

<% var user = (WAPConfigUser) HttpContext.Current.Session["CurrentUser"]; 
    if (user == null || user.IsLoggedIn == false || user.IsPublic) 
    { 
     Html.RenderAction("LogOn", "Account"); 
    } else { %> 

    <span class="PageNavLink"> 
     <% Html.RenderPartial("AccountMenu"); %>   
    </span> 
    <div id="IndexContent" class="IndexContent"> 
     <% Html.RenderAction("UserList", "Account"); %>  
    </div> 

<% } %> 

donc je tape le nom d'utilisateur & mot de passe et le code suivant exécute (et l'utilisateur est ajouté à la session pour retreival plus tard) et je redirigés vers la page que je veux:

(spécifiquement return Redirect(redirect);)

[AcceptVerbs(HttpVerbs.Post)] 
    public ActionResult LogOn(WAPConfigUser user) 
    { 
     if (!ValidateLogOn(user.UserName, user.Password)) 
     { 
      return PartialView(); 
     } 
     else 
     { 
      string redirect = ""; 
      if (Request.QueryString["ReturnUrl"] != null) 
      { 
       redirect = Request.QueryString["ReturnUrl"].ToString(); 
       return Redirect(redirect); 
      } 
      else 
      { 
       return RedirectToRoute("Default"); 
      } 
     } 
    } 

dehors et je me connecter alors je redirigé vers l'écran d'ouverture de session:

public RedirectToRouteResult LogOut() 
{ 
    Session.Remove("CurrentUser"); 
    return RedirectToAction("Index", "Account"); 
} 

Quand je tape mon nom d'utilisateur & mot de passe, le premier point d'arrêt qui obtient hit est: (qui tente de charger la page entière, il semble)

public ActionResult Index() 
    {    
     return View(); 
    } 

le prochain point d'arrêt qui obtient frappé est la ligne return RedirectToRoute("Default");:

[AcceptVerbs(HttpVerbs.Post)] 
    public ActionResult LogOn(WAPConfigUser user) 
    { 
     if (!ValidateLogOn(user.UserName, user.Password)) 
     { 
      return PartialView(); 
     } 
     else 
     { 
      string redirect = ""; 
      if (Request.QueryString["ReturnUrl"] != null) 
      { 
       redirect = Request.QueryString["ReturnUrl"].ToString(); 
       return Redirect(redirect); 
      } 
      else 
      { 
       return RedirectToRoute("Default"); 
      } 
     } 
    } 

mais si je fais un pas dans le code ma route par défaut ne sera exécuté. Lorsque je fais un pas à la ligne suivante, il va à la ligne suivante Html.RenderAction("LogOn", "Account"); à nouveau dans la vue d'index de mon AccountController et que (juste le contrôle de l'utilisateur) est renvoyée au navigateur:

<% var user = (WAPConfigUser) HttpContext.Current.Session["CurrentUser"]; 
    if (user == null || user.IsLoggedIn == false || user.IsPublic) 
    { 
     Html.RenderAction("LogOn", "Account"); 
    } else { %> 

    <span class="PageNavLink"> 
     <% Html.RenderPartial("AccountMenu"); %>   
    </span> 
    <div id="IndexContent" class="IndexContent"> 
     <% Html.RenderAction("UserList", "Account"); %>  
    </div> 

<% } %> 

Il y a quelques choses que je fais pas comprendre ici.

  1. Pourquoi RedirectToRoute("Default") ne pas me rediriger vers l'itinéraire par défaut?
  2. Pourquoi l'utilisateur est-il nul après l'avoir ajouté à la session lorsque je me suis connecté la deuxième fois? (par exemple, la ligne var user = (WAPConfigUser) HttpContext.Current.Session["CurrentUser"]; doit renvoyer l'utilisateur connecté que je viens d'ajouter à la session précédente. Cette ligne n'est pas touchée par le point d'arrêt, donc il semble y avoir un autre utilisateur NOT-logged-in. exécuter une ligne qui ne devrait pas être, sur une page qui ne devrait pas être

Je sais que je vais probablement être abattu pour ajouter l'utilisateur à la session, mais est-ce que quelqu'un a une idée de ce qui se passe? Si plus d'informations sont nécessaires, demandez & Je vais mettre à jour la question.

Merci

Dave

+0

Vous devez vérifier la connexion du navigateur avec Fiddler pour voir si une redirection est renvoyée. Vous ne pouvez pas "enjamber" une redirection. –

Répondre

0

Le problème a été:

D'abord, il allait à l'index & retournant une vue();

public ActionResult Index() 
{    
    return View(); 
} 

Ce point de vue contenait une instruction d'appel

Html.RenderAction("LogOn", "Account"); 

... et quelques autres trucs arrivé que je ne suis pas sûr de. Ce qui a finalement fonctionné était de prendre le contrôle du POST avec jQuery et d'appeler directement la méthode d'action LogOn. Cela a évité le besoin d'Index(). J'ai fait la validation et en fonction du résultat, je redirige l'utilisateur vers la page requise.

Questions connexes