在ASP.Net-MVC中的控制器之间传递信息

Jac*_*amy 6 asp.net-mvc

这是如何在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)