所以在同一个控制器中我有一个像这样的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.
时它不为空所以我该怎么办?
答案 0 :(得分:2)
ASP.NET MVC
旨在回归到建立在HTTP上的更清洁,更直接的网络世界,这是无状态的,这意味着没有"内存"之前发生的事情,除非你专门使用一种确保其他方法的技术。
因此,通过一个ActionResult设置的状态将不再是调用另一个ActionResult时存在的状态。
你如何修复"这个?根据您的需求,您有多种选择:
答案 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.
}