我正在尝试将主_Layout中的数据共享到RenderBody渲染的视图中。
我试图使用在“ Shared / _Layout”中初始化的ViewBag,但是它不起作用。但是,我注意到该ViewBag可以局部使用,而不能用于@RenderBody显示的视图。
示例_Layout:
PageData["XX"] = "myValue";
ViewContext.Controller.ViewBag.XX= "myValue";
Page.XX= "myValue";
ViewBag.XX= "myValue";
ViewContext.ViewData["XX"] = "myValue";
<body>
@Html.Partial("_MyPartial") // Everything has the correct value in the partial
<main class="content">
@RenderBody() // Everything is null in that view
</main>
</body>
我尝试使用ViewBag.Property,ViewData [“ Property”],Page.Property和PageData [“ Property”],但在RenderBody渲染的视图中它们都为null。 似乎是因为Layout是最后编译的元素。
我不想使用任何代码。一切都必须存在于视图中,做一些类似于我上面的示例的操作。它必须在布局中,因为我要共享的值是由用户通过CMS定义的。这意味着该布局不仅用于静态页面,而且还用于控制器呈现的视图。
我的问题是:如何从_Layout提供数据/共享数据到RenderBody()渲染的视图?
答案 0 :(得分:0)
在您的布局中尝试一下:
@ViewContext.Controller.ViewBag.Test= "test";
答案 1 :(得分:0)
我如何向RenderBody()渲染的视图提供/共享数据?
控制器负责准备数据(模型,ViewBag,TempData等)并将其移交给视图。
您还可以查看filters来准备数据。
您需要在您的Controller中填充ViewBag:
public class HomeController
{
public ActionResult Index()
{
// populate your ViewBag
ViewBag.myValue = "some text";
}
}
然后在您的View / PartialView中可以像这样使用它:
MyPartialView.cshtml
<label>@ViewBag.myValue</label>
答案 2 :(得分:0)
是的,您可以在局部视图中使用viewBag。当在剃刀文件中调用viewBag(.cahtml) 您必须返回局部视图才能显示。
答案 3 :(得分:-1)
ViewBag和ViewData是特定于视图的,因此只要您单击其他View / Action,它们就会被清空。尝试检查此链接http://rachelappel.com/when-to-use-viewbag-viewdata-or-tempdata-in-asp.net-mvc-3-applications以获得更多信息。
尝试使用TempData实现效果-http://www.tutorialsteacher.com/mvc/tempdata-in-asp.net-mvc