RedirectToRoute(“Default”)不重定向,返回LogOn PartialViewResult的HTML而不是

时间:2010-02-26 17:29:34

标签: asp.net-mvc authentication

帐户页面正常打开:

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

这将呈现以下View模板:(因为此时没有CurrentUser,'user'为null,因此它运行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>

<% } %>

所以我输入用户名&amp;密码,并运行以下代码(并将用户添加到会话以便稍后进行审阅),然后我被重定向到我想要的页面:

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

当我输入我的用户名&amp;密码再次被击中的第一个断点是:(试图加载整个页面,似乎)

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

但如果我单步执行代码,我的默认路由永远不会被执行。当我走到下一行时,它会在我的AccountController的索引视图中再次转到以下行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>

<% } %>

这里有一些我不明白的事情。

  1. 为什么RedirectToRoute("Default")没有将我重定向到默认路由?
  2. 当我第二次登录时,为什么用户将其添加到会话后为空? (即,行var user = (WAPConfigUser) HttpContext.Current.Session["CurrentUser"];应该返回我刚刚添加到此前会话的登录用户。相反,该行不会受到断点的影响,因此它似乎有另一个未记录的 - 在用户。它正在执行一条不应该的行,在它不应该的页面上!
  3. 我知道我可能会因为将用户添加到会话而被拍摄,但是有人知道发生了什么吗?如果需要更多信息,请询问&amp;我会更新问题。

    由于

    戴夫

1 个答案:

答案 0 :(得分:0)

问题是:

首先是去索引&amp;返回一个View();

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

该视图包含调用

的指令
Html.RenderAction("LogOn", "Account");

......还有其他一些事情发生了,我不确定。

最终工作的是用jQuery控制POST并直接调用LogOn Action Method。这绕过了对Index()的需求。我进行了验证,根据结果,我将用户重定向到所需的页面。