从控制器传递数据到视图布局的最佳实践是什么?
传递数据从控制器到视图布局的最佳实践是使用子操作(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.Section @Model.Today.ToLongTimeString()
然后在视图或布局中使用Html.Action()或.RenderAction()来调用子操作。
@{Html.RenderAction("Header", "Home", new { section = "Cake" });}
你可以在布局中指定一个section,并在视图中根据需要进行条件渲染。
_Layout.cshtml文件内容如下:
@RenderSection("header", required: false)
主视图中的代码如下:
@section header { @{Html.RenderAction("Header", "Home", new { section = "Cake" });} }
这种方式最大的好处是可以在视图中动态获取数据,而且使用输出缓存可以提高性能。如果需要在更新数据时手动使缓存失效,可以参考这个Stack Overflow的回答。
这种方式非常适合我的需求,通过使用子操作和输出缓存,可以轻松地在视图布局中传递数据。