2017-03-01 68 views
0

我想在布局的共享视图中使用ViewBag值,但是从另一个控制器提供。特别是,我想呈现主体动作,然后添加来自另一个控制器的少量变量,这些变量在很多页面中使用(但不是在所有页面中都是为了证明使用全局变量)。在共享视图中的Viewbag变量_layout

查看/共享/ _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

在布局,我可以访问的唯一Viewbag变量是RenderBody的行动目标的那些。

+0

如果没有值传递给视图,那么你会怎么想到来访问它们(的情况发生,你期待什么) –

+0

@StephenMuecke我明白.​​..但如何将新的变量添加到ViewBag未来从另一个控制器? – Cyr

+0

你不能,你需要将它们添加到正在生成视图的控制器中。 –

回答

0

您应该返回该视图。

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

我不需要一个页面,我只需要一些变量。 – Cyr

+0

所以使用json或其他的东西(用javascript回调调用ajax)。 MVC操作在服务器端运行,因此您的视图不会刷新视图包,因为您使用的void方法不会将任何内容返回给客户端。 – maximelian1986