0

我有一个具有两个动作功能的控制器类。一个动作是我的登录页面,有一个视图,另一个是我的后端页面,有多个视图。

public ActionResult Login(...)
{
    if (logged in or login success)
    {
        return RedirectToAction("Backend","Controller");
    }
    ...
    return View();
}

public ActionResult Backend(...)
{
    if(session expired or not logged in)
    {
        return RedirectToAction("Login","Controller");
    }
    ...
    return View("someView");
}

问题是当后端操作必须将用户发送到登录操作时,我想在登录页面上向用户显示“会话已过期”之类的消息。

例如,ViewBag 仅存在于当前会话中。但是有没有一种类似且简单的方法可以在会话之间存储信息?所以我可以在后端设置一条消息,然后重定向到登录,让登录读取该消息并将其显示在视图中?有点像 PersistentViewBag。

我真的不想使用 get、post 或 cookie,因为这是一个可行的选择,但我宁愿只在后端操作中将登录作为其自己的视图。

4

1 回答 1

2

当您重定向到登录页面时,您可以简单地使用查询字符串来传递数据。

public ActionResult Backend(...)
{
    if(session expired or not logged in)
    {
        return RedirectToAction("Login","Controller",new { IsSessionExpired = true });
    }
    ...
    return View("someView");
}

在您的登录操作中,您可以检查查询字符串并决定是否要显示该消息。

更新

如果您不想使用查询字符串,也可以使用 TempData。

public ActionResult Backend(...)
{
    if(session expired or not logged in)
    {
        TempData["IsSessionExpired"] = true;
        return RedirectToAction("Login","Controller");
    }
    ...
    return View("someView");
}

然后您可以在登录操作中检查它:

if(TempData["IsSessionExpired"] != null)
{
    //Show message
}
于 2013-02-18T20:21:24.213 回答