【问题标题】:Getting viewbag dynamic property's value as null将 viewbag 动态属性的值设为 null
【发布时间】:2014-12-16 10:20:54
【问题描述】:

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

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

ViewBag.Login = "false";
return RedirectToAction("Index");

这是我在索引视图(cshtml)中使用的代码。

@if (@ViewBag.Login != "")

在这里,我将@ViewBag.Login 的值设为空。即使我像这样删除@符号

ViewBag.Login  Still I get value as null. 

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

【问题讨论】:

  • ViewBag 用于将值从控制器传递到视图。但是您正在重定向并且价值丢失了。您可以将值分配给TempData,在Index() 方法中检索它,然后将其分配给ViewBag
  • 或者只是return View()而不是重定向。
  • @X.L.Ant :它奏效了。谢谢.....

标签: c# view asp.net-mvc-5 controllers


【解决方案1】:

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();
}

【讨论】:

  • 或者,在第一个示例中,将 Login 存储在 TempData 而不是 ViewBag 中。
【解决方案2】:

ViewBag 无法跨越RedirectToAction。可以使用TempData,只能访问一次:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-02
    • 2010-10-03
    • 1970-01-01
    相关资源
    最近更新 更多