将数据从控制器传递到视图布局的最佳做法是什么?
我目前有一个MVC网站,需要在每个页面的标题上都有动态内容。
我目前在控制器中正常获取所需数据并将其放在View Model中。 在视图中,我获取数据并将模板部分粘贴到Viewbag中,最后,在主布局页面上,我获取Viewbag数据并将其传递给控制标题的部分。
我已经读过,我不应该尽可能使用Viewbag,而且我传递数据的次数感觉不对。
我能想到改善这一点的唯一方法是在主布局上创建一个部分,然后将部分/数据放在视图的部分中 – 但是,有大约30页,这再次感觉不像正确的路线。
是否有更好的方法来执行此操作/获取必须转到主视图的动态数据的最佳实践是什么?
您可以使用Child Actions执行此操作。 您可以重复使用此操作,甚至可以将其包含在_Layout页面中。
这是一个显示一些标题信息的子操作。 它标记为ChildActionOnly
因此只能在另一个视图中调用它。 它还利用OutputCache
将结果保存5分钟。
[ChildActionOnly] [OutputCache(Duration = 5 * 60)] public ActionResult Header(string section) { var info = new HeaderInfo { Section = section, Today = DateTime.Now }; return PartialView("_header", info); }
_header.cshtml
@model HeaderInfo @Model.Section @Model.Today.ToLongTimeString()
然后在Html.Action()或.RenderAction()的视图或布局中使用它。
@Html.Action("Header", "Home", new { section = "Cake" }) // or @{Html.RenderAction("Header", "Home", new { section = "Pie" });}
您可以在布局中指定一个部分,然后在视图中出现时有条件地渲染。
_Layout.cshtml
@RenderSection("header", required: false)
主要观点
@section header { @{Html.RenderAction("Header", "Home", new { section = "Cake" })} }
- 使用asp.net Identity进行Azure AD身份validation以进行授权
- 我可以遍历Collection.Request.Form吗?
- MVC DropDownList选中的值不起作用
- 无法加载文件或程序集’System.IdentityModel,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089’或其依赖项之一
- 将list ,对象和基元的混合传递给ASP MVC控制器操作的方法
- 在MVC中,可以更改@ Html.DropDownListFor中每个列表项的字体(创建类似于MS office的字体下拉列表
- entity frameworkC#插入数据俄语编码问题
- JSON.NET反序列化/序列化JsonProperty JsonObject
- 如何在.Net MVC中将文件从磁盘流式传输到客户端浏览器