C# 获取viewbag动态属性';s值为空

C# 获取viewbag动态属性';s值为空,c#,view,asp.net-mvc-5,controllers,C#,View,Asp.net Mvc 5,Controllers,我在控制器中的登录操作方法中,在名为login的动态属性中存储一个值,并在索引视图中访问viewbag的值。我将该值设置为null。为什么会这样 下面是我在控制器登录操作方法中的代码 ViewBag.Login = "false"; return RedirectToAction("Index"); 这是我在索引视图(cshtml)中使用的代码 在视图中,我得到@ViewBag.Login的值为空。即使我像这样删除@符号 ViewBag.Login Still I get value as

我在控制器中的登录操作方法中,在名为login的动态属性中存储一个值,并在索引视图中访问viewbag的值。我将该值设置为null。为什么会这样

下面是我在控制器登录操作方法中的代码

ViewBag.Login = "false";
return RedirectToAction("Index");
这是我在索引视图(cshtml)中使用的代码

在视图中,我得到
@ViewBag.Login
的值为空。即使我像这样删除@符号

ViewBag.Login  Still I get value as null. 

请帮忙。ViewBag应在绑定到同一控制器的视图和操作方法中保留值。

ViewBag
不会在http请求中保留

你可以

public ActionResult Login()
{
   /* Pass `Login` by QueryString */
   return RedirectToAction("Index", new { Login = false });
}

public ActionResult Index(bool Login) 
{
   /* Read from QueryString, and pass the value to `ViewBag` */
   ViewBag.Login = Login;
   return View();
}

ViewBag
将无法跨
重定向到操作
。您可以使用
TempData
,可以只访问一次:

TempData["Login"] = "false";
return RedirectToAction("Index");

ViewBag
用于将值从控制器传递到视图。但是您正在重定向,并且该值丢失。您可以将该值分配给
TempData
,在
Index()
方法中检索该值,然后将其分配给
ViewBag
。或者只需
return View()
即可,而不必重定向。@X.L.Ant:成功了。谢谢……或者,在第一个示例中,将登录名存储在TempData而不是ViewBag中。
TempData["Login"] = "false";
return RedirectToAction("Index");