剃刀视图引擎RenderSection

时间:2010-11-19 03:18:10

标签: asp.net-mvc-3 razor

我正在挖掘这款新的Razor View引擎......对于刚来自其他网络平台的人来说,新的MVC 3工作开始让我感到宾至如归......

我的问题是关于部分,我看到可以在布局中定义部分并将内容注入其中,但是从我看到的所有样本看来,这是从视图中完成的。对我来说,从控制器为每个部分分配内容或输出更有意义。

因此,如果我有一个包含侧栏的布局,我想将窗口小部件加载到我的视图文件中,则不应该负责将内容呈现到这些部分中。如果是这种情况,那么如果侧栏内容在多个视图中共享,那么我将不得不跨视图文件复制该代码。我的视图文件应该不知道在它们旁边的侧栏中呈现的内容。

理想情况下,我想将内容分配给我的控制器侧栏中的部分,所以我的问题是,这可能吗?

1 个答案:

答案 0 :(得分:1)

在ASP.NET MVC(以及其他基于MVC的Web应用程序体系结构)中,控制器准备视图呈现的数据。如何,在何处,甚至可能甚至在呈现此数据时,视图的工作都要弄明白。这当然更像是建筑设计讨论。

ASP.NET MVC的一个好处是它们的“约定优于配置”的立场(特别是使用Razor)可以让你改变很多事情的行为方式。我认为没有View.Sections["section1"] = <some data>;选项,但您可以创建基于节的ViewModel,然后使用一些通用的主视图,它只是拆分此ViewModel并将正确的数据发送到正确的部分视图。部分的视图模型甚至可以包含必须呈现的HTML,因为可以使用Razor在.cshtml文件外部呈现HTML。有关更多信息,请访问Andrew Nures的博客:http://blog.andrewnurse.net/

正如您所看到的,这会将很多责任从视图转移到控制器。我自己就像渲染完全与控制器分离,因为我可以假设通过改变数据的呈现方式来构建非常不同的网站。