【问题标题】:Viewbag variable in shared view _layout共享视图 _layout 中的 Viewbag 变量
【发布时间】:2017-03-01 12:21:10
【问题描述】:

我想在布局的共享视图中使用 ViewBag 值,但由另一个控制器提供。特别是,我想渲染主要动作,然后添加来自另一个控制器的一些变量,这些变量在很多页面中使用(但不是在所有页面中都可以证明使用全局变量的合理性)。

视图/共享/_Layout.cshtml

<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <meta charset="utf-8" />
    <title>@ViewBag.Title</title>
    @Styles.Render("~/Content/css_custom")
    @Scripts.Render("~/bundles/modernizr")
</head>
<body>
    @Html.Action("myAction", "myController")

    <p>Value: @ViewBag.testval </p>

    @RenderBody()

</body>
</html>

控制器/myController.cs

namespace myProject.Controllers
{
    public class myController : Controller
    {

        public void myAction() {

            string test_value = "Hey!";

            ViewBag.testval = test_value;
        }

    }

}

在布局中,我可以访问的唯一 Viewbag 变量是 RenderBody 的操作目标。

【问题讨论】:

  • 如果您不将值传递给视图,那么您希望如何访问它们(您希望发生什么)
  • @StephenMuecke 我明白了...但是如何从另一个控制器向 ViewBag 添加新变量?
  • 你不能,你需要将它们添加到生成视图的控制器中。
  • 当您可以制作需要testval 的模型应该派生的basemodel 并且basemodel 具有testval 字符串时,为什么要使用viewbag。我期待着您的解决方案。以及您选择该选项的原因。

标签: asp.net asp.net-mvc razor asp.net-mvc-5


【解决方案1】:

你应该返回那个视图。

public ActionResult Index()
{
    ViewBag.testval = "Test value";
    return View();
}

【讨论】:

  • 我不需要页面,我只需要一些变量。
  • 所以使用 json 或其他东西(使用 javascript 回调的 ajax 调用)。 MVC 操作在服务器端运行,因此您的视图不会刷新视图包,因为您使用不向客户端返回任何内容的 void 方法。
猜你喜欢
  • 2012-10-12
  • 1970-01-01
  • 2020-09-07
  • 1970-01-01
  • 2015-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多