在 ASP.NET MVC 中构造视图层次结构的最佳方法是啥?

Posted

技术标签:

【中文标题】在 ASP.NET MVC 中构造视图层次结构的最佳方法是啥?【英文标题】:What's the best way of structuring hiearchy of views in ASP.NET MVC?在 ASP.NET MVC 中构造视图层次结构的最佳方法是什么? 【发布时间】:2016-06-17 09:35:01 【问题描述】:

我目前正在将 ASP.NET 网络表单解决方案转换为 MVC。

在 webforms 中,除了 site.master 之外,我们还有母版页,我们在其中保留了每个部分的通用代码和头部导入。所以一个正常的页面继承是这样的:

Site.master -> section.Master -> page.aspx

在 MVC 中,我不清楚将部分通用代码放在哪里。将部分内容拆分为部分视图是唯一的解决方案吗?这样就变成了?

Layout.cshtml -> page.cshtml -> any-number-of-partial-views

举个例子,如果我需要一个 CSS 文件在所有 10 个部分页面之间共享,我可以将它放在局部视图中并在每个页面上呈现它,但感觉效率并不高。或者也许我只需要了解这种新的工作方式。

【问题讨论】:

查找例如 RenderSections,您也可以在布局中使用局部视图。 应该在 _Layout.cshtml 中的 header 标签中提及对跨视图共享的所有 CSS 文件的引用 【参考方案1】:

您也可以在 MVC 中使用 sections。

在您的_Layout.cshtml 中,您可能有这样的内容:

 @RenderSection("testSection",required:false)

在您的子视图中,您可以指定应在此部分中呈现哪些 HTML,或者您可以将它们放在一起,因为 required 已设置为 false:

@section testSection

    <h1>Test</h1>


【讨论】:

【参考方案2】:

如果您想在多个地方重用代码,部分视图是您的好朋友。

您可以将部分视图放入 Views > ControllerNameAsFolderName > 视图页面(放在这里)以仅在相同的控制器视图中使用,甚至在共享文件夹中全局使用。

section 是另一种选择,类似于UserControl(在网络表单中)。在布局页面上创建部分参考@RenderSection("sectionName", required:false) 并在查看页面上使用它,例如

@section sectionName
    <div>content goes here</div>

假设您想在查看页面的&lt;head&gt; 中添加一些内容(例如元信息),在这种情况下,您可以在_Layout.cshtml 页面中创建一个section,然后在查看页面上使用该section

通过这种方式,您可以将代码放置在任何页面的 DOM 结构中的特定位置。 section 有一个很棒的功能,可以让您将其标记为required:false/true

【讨论】:

以上是关于在 ASP.NET MVC 中构造视图层次结构的最佳方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 ASP.NET MVC 在 Kendo UI Grid 中实现 N 级嵌套层次结构

另类的ASP.NET快速开发架构体系

ASP.NET MVC 如何从嵌套对象的视图模型集合中动态创建表结构

ASP.NET MVC教程五:ASP.NET MVC中的路由

理解ASP.NET MVC

如何在 ASP.NET MVC 视图中用 C# 打印出 GridView?