在 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>
假设您想在查看页面的<head>
中添加一些内容(例如元信息),在这种情况下,您可以在_Layout.cshtml
页面中创建一个section
,然后在查看页面上使用该section
。
通过这种方式,您可以将代码放置在任何页面的 DOM 结构中的特定位置。 section
有一个很棒的功能,可以让您将其标记为required:false/true
。
【讨论】:
以上是关于在 ASP.NET MVC 中构造视图层次结构的最佳方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 ASP.NET MVC 在 Kendo UI Grid 中实现 N 级嵌套层次结构
ASP.NET MVC 如何从嵌套对象的视图模型集合中动态创建表结构