是否从一个Action方法转到另一个action方法清除类变量?

时间:2016-06-08 21:52:37

标签: c# asp.net-mvc asp.net-mvc-5

所以在同一个控制器中我有一个像这样的Login Action方法:

    public ActionResult Login()
    {

        LoginModel model = this.LoginManager.LoadLoginPageData();
        this.ForgotPasswordMethod = model.ForgotPasswordMethod;
        return View(model);
    }

注意我在那里设置了一个变量:ForgotPasswordMethod

所以现在当他们点击一个链接在那个页面上时,它会在同一控制器类中调用另一个动作结果,如下所示:

public ActionResult ForgotPassword()
{
    if (!string.IsNullOrWhiteSpace(this.ForgotPasswordMethod) && this.ForgotPasswordMethod.Trim().ToUpper() == "TASKS")
        return View();

    return null;  //todo change later.
}

注意我试图读取ForgotPasswordMethod的值,但它是NULL但是当我在Login() method.时它不为空所以我该怎么办?

2 个答案:

答案 0 :(得分:2)

ASP.NET MVC旨在回归到建立在HTTP上的更清洁,更直接的网络世界,这是无状态的,这意味着没有"内存"之前发生的事情,除非你专门使用一种确保其他方法的技术。

因此,通过一个ActionResult设置的状态将不再是调用另一个ActionResult时存在的状态。

你如何修复"这个?根据您的需求,您有多种选择:

  • 将值渲染到客户端并将值发回第二个ActionResult方法。
  • 将值存储为标题并检查标题。
  • 将值存储在Cookie中并检查Cookie。
  • 将值存储在会话中。
  • 将值存储在数据库中。
  • 将值存储在静态字典中。

答案 1 :(得分:0)

如果您在Viewbag中存储了forgetpassword方法

,该怎么办?
 public ActionResult Login()
{
    LoginModel model = this.LoginManager.LoadLoginPageData();
    Viewbag.ForgotPasswordMethod = model.ForgotPasswordMethod;
    return View(model);
}    

然后在您网页的链接中,您可以传递ViewBag中的值

<a href=@Url.Action("ForgotPassword", "Name of your Controller", new { methodName = ViewBag.ForgotPasswordMethod })>Forgot Password</a>

将您的忘记密码更改为

public ActionResult ForgotPassword(string methodName)
{
    if (!string.IsNullOrWhiteSpace(methodName) && methodName.Trim().ToUpper() == "TASKS")
    return View();

    return null;  //todo change later.
}