Asp.net mvc 注销后将消息B/w控制器传递给查看页面
我必须将消息从控制器1发送到控制器3,最后发送到视图。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
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”]作为字符串移动销毁会话之前的代码>行