这是如何在ASP.NET MVC中RedirectToAction的副本,而不会丢失请求数据
嗨,我遇到了一个让我刮伤脑袋的问题.基本上我有一个登录页面Login.aspx,它有用户名和密码字段,以及一个重要的小复选框.登录在AccountController登录方法中处理.目前的代码如下:
[AcceptVerbs(HttpVerbs.Post)]
[SuppressMessage("Microsoft.Design", "CA1054:UriParametersShouldNotBeStrings",
Justification =
"Needs to take same parameter type as Controller.Redirect()")]
public ActionResult LogOn(string userName, string password, string returnUrl,
bool sendStoredInfo)
{
if (!this.ValidateLogOn(userName, password)) {
return View();
}
this.FormsAuth.SignIn(userName, false);
if (!String.IsNullOrEmpty(returnUrl)) {
return Redirect(returnUrl);
} else {
return RedirectToAction("Index", "Home");
}
}
Run Code Online (Sandbox Code Playgroud)
基本上,如果该行返回Redirect(returnUrl); 然后它会在另一个控制器OpenIDController中结束,这就是sendStoredInfo bool变得重要的情况.但问题是当我在OpenIDController中时,我没有引用它.如何发送此值?
Phi*_*law 14
还要考虑使用TempData将数据从控制器传递到控制器.这可能是有利的,因为您不必将bool sendFlag接口可能暴露给用户.
第一个控制器中的代码:
TempData["sendFlag"] = sendStoredInfo;
return RedirectToAction("LoginFailed");
Run Code Online (Sandbox Code Playgroud)
第二个控制器中的代码:
public ActionResult LoginFailed()
{
bool sendFlag = TempData.ContainsKey("sendFlag")? TempData["sendFlag"]: false;
}
Run Code Online (Sandbox Code Playgroud)
Nei*_* T. 13
将通话更改为:
return RedirectToAction("LoginFailed", new { sendFlag = sendStoredInfo });
Run Code Online (Sandbox Code Playgroud)
控制器操作方法签名可能类似于:
public ActionResult LoginFailed(bool sendFlag)
{
...
}
Run Code Online (Sandbox Code Playgroud)