Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 注销后将消息B/w控制器传递给查看页面_Asp.net Mvc_Viewbag_Tempdata - Fatal编程技术网

Asp.net mvc 注销后将消息B/w控制器传递给查看页面

Asp.net mvc 注销后将消息B/w控制器传递给查看页面,asp.net-mvc,viewbag,tempdata,Asp.net Mvc,Viewbag,Tempdata,我必须将消息从控制器1发送到控制器3,最后发送到视图。 控制器1 public ActionResult controller1() { TempData["data"] = "work finish."; return RedirectToAction("logoff"); } 然后在控制器2中 public ActionResult logoff() { AuthenticationManager.SignOut(); Ses

我必须将消息从控制器1发送到控制器3,最后发送到视图。
控制器1

public ActionResult controller1()
{
    TempData["data"] = "work finish.";
    return RedirectToAction("logoff");
}
然后在控制器2中

    public ActionResult logoff()
    {
        AuthenticationManager.SignOut();
        Session.Abandon();
        return RedirectToAction("index");
    }
控制器3

    public ActionResult index()
    {
        ViewBag.data = TempData["data"] as string;
        return View();
    }
在查看页面中

<span>@ViewBag.data</span>
@ViewBag.data
返回空消息。
提前感谢。

在这种情况下,您应该避免使用TempData。如果您知道需要在多个控制器操作中使用该值,则TempData不适合您,因为一旦您访问它,它将被擦除(免责声明:如果您使用Peek(),它将被持久化,但这不是讨论的内容)

我认为可以为您工作的是根据操作结果在URL中使用参数重定向。您可以这样做:

public async Task<ActionResult> Login(LoginViewModel model, string returnUrl)
{
    var result = await SignInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, shouldLockout: false);
    switch (result)
    {
        case SignInStatus.Success:                    
            TempData["data"] = "Login Success";
            return RedirectToAction("Action", new { loginSuccessful = true });
        default:
            ModelState.AddModelError("", "Invalid login attempt.");
            return View(model);
    }
}
public class SampleController : Controller
{
    public SampleController()
    {

    }

    public ActionResult Index(bool loginSuccessful)
    {
        if (loginSuccessful)
        {
            ViewBag["message"] = "Login successful";
        }
        return View();
    }
}

如果任何其他控制器操作需要该参数,您只需将其添加到函数签名中,就像我在
索引
操作中所做的那样,只要该参数仍在URL中,它就可以工作。

@ana可能我没有很好地获得它。如果你能再解释一些,那就太好了。我认为我的回答涵盖了你所问的问题,因为它被解释了。如果我能帮忙,请告诉我。
TempData
使用
Session
。将
ViewBag.data=TempData[“data”]作为字符串移动会话之前的代码>行