2010-02-26 54 views
0

帳戶頁面打開像正常:RedirectToRoute(「默認」)沒有進行重定向,回到LogOn支持PartialViewResult的HTML相反

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

這正好呈現以下視圖模板:(因爲此時沒有CurrentUser,「用戶」爲空,所以它運行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> 

<% } %> 

所以我的用戶名&密碼類型,下面的代碼運行(和用戶添加到會話retreival更高版本)和我重定向到我想要的頁面:

(特別是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"); 
      } 
     } 
    } 

然後我退出,我重定向到登錄屏幕:

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

當我再次輸入了用戶名密碼&,即獲得第一個斷點命中是:(試圖加載整個頁面,看來)

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

那被擊中的下一個斷點行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"); 
      } 
     } 
    } 

,但如果我通過代碼我的默認路由永遠不會被執行。當我一步到下一行,它進入下面的行Html.RenderAction("LogOn", "Account");再次出現在我的AccountController的索引視圖以及(就在用戶控件)被返回給瀏覽器:

<% 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> 

<% } %> 

有幾件事情我不在這裏瞭解。

  1. 爲什麼RedirectToRoute("Default")不會將我重定向到默認路由?
  2. 爲什麼在我第二次登錄時將用戶添加到會話後爲空? (即,var user = (WAPConfigUser) HttpContext.Current.Session["CurrentUser"];行應該返回剛纔添加到此會話中的登錄用戶,而不是該斷點的命中,因此它似乎有另一個NOT登錄的用戶。在它不應該在的頁面上執行一條線,

我知道我可能會因爲將用戶添加到Session而被槍殺,但是沒有人知道會發生什麼如果需要更多信息,請詢問&我會更新問題。

感謝

戴夫

+0

您需要查看與Fiddler的瀏覽器連接以查看是否返回重定向。你不能「跨越」重定向。 – 2010-02-26 18:24:41

回答

0

的問題是:

首先它要索引&返回查看();

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

這種觀點包含的指令調用

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

...和一些其他的東西發生了,我不確定。

最終的工作是用jQuery控制POST並直接調用LogOn Action方法。這繞開了對Index()的需求。我做了驗證,並根據結果,將用戶重定向到所需的頁面。