【问题标题】: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 文件的引用

标签: asp.net asp.net-mvc


【解决方案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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-02-09
      • 1970-01-01
      • 1970-01-01
      • 2016-11-09
      • 2014-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多