【问题标题】:When should a page use a layout in MVC?页面什么时候应该在 MVC 中使用布局?
【发布时间】:2014-08-16 21:38:04
【问题描述】:

页面什么时候应该使用布局或渲染布局?当我应该创建一个使用布局的页面时,我有点困惑。

不同

@{
    Layout = null;
}

@{
    ViewBag.Title = "Edit";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

【问题讨论】:

  • ViewBag.Title 您在浏览器的标题中有标题,您在页面背景上有布局,如果布局为空,则您的布局中有操作,那么您没有布局的背景和操作。
  • 首先,你应该写一些关于“什么是mvc,什么是布局,什么是razor,什么是masterpage...”的文章

标签: asp.net-mvc


【解决方案1】:

_Layout 就像 ASP.NET 网络表单中的母版页。如果您想在多个页面中应用一个通用主题(菜单、样式..),那么_Layout 文件是最好的放置位置。

您可以为整个应用程序创建一个 _Layout 文件,也可以为应用程序的每个特定模块分别创建一个文件。

_ViewStart 文件引用了应用程序中使用的 _Layout 页面。

如果您使用以下代码,则相应页面会将布局重置为 null,并且不会呈现 _ViewStart 中定义的布局。 _ViewStart 文件中的代码在每个视图的开头执行。

@{
   Layout = null;
}

如果您希望页面中的任何特定布局覆盖定义的默认布局 int _ViewStart,那么您可以执行以下操作

@{
   ViewBag.Title = "Edit";
   Layout = "~/Views/Shared/_OtherLayout.cshtml";
}

您不需要在任何单独的视图文件中显式设置布局,除非您想覆盖_ViewStart 中定义的默认布局。

或者,如果您希望_ViewStart 根据控制器决定要呈现哪个布局页面,那么您可以在_ViewStart 页面中编写如下内容。视图将在渲染时应用相应的布局主题。

@{
    var controller = HttpContext.Current.Request.RequestContext.RouteData.Values["Controller"].ToString();

    string layout = "";
    if (controller == "ReportController")
    {
       layout = "~/Views/Shared/_ReportsLayout.cshtml";
    }
    else
    {
        layout = "~/Views/Shared/_Layout.cshtml";
    }

    Layout = layout;
 }

【讨论】:

    【解决方案2】:

    阿德,

    不久前我回答了一个类似的问题:

    *来自 scottgu 的博客(参考:http://weblogs.asp.net/scottgu/archive/2010/10/22/asp-net-mvc-3-layouts.aspx):

    从 ASP.NET MVC 3 Beta 版本开始,您现在可以在项目的 \Views 文件夹下添加一个名为 _ViewStart.cshtml(或 _ViewStart.vbhtml 用于 VB)的文件:

    _ViewStart 文件可用于定义您希望在每个视图渲染开始时执行的通用视图代码。例如,我们可以在 _ViewStart.cshtml 文件中编写代码,以编程方式将每个 View 的 Layout 属性默认设置为 SiteLayout.cshtml 文件:

    由于这段代码在每个视图的开头执行,我们不再需要在任何单独的视图文件中显式设置布局(除非我们想覆盖上面的默认值)。

    重要提示:因为 _ViewStart.cshtml 允许我们编写代码,所以我们可以选择使我们的布局选择逻辑更丰富,而不仅仅是一个基本的属性集。例如:我们可以根据访问站点的设备类型来改变我们使用的布局模板——并为这些设备提供优化的手机或平板电脑布局,以及针对 PC/笔记本电脑的桌面优化布局。或者,如果我们正在构建供多个客户使用的 CMS 系统或通用共享应用程序,我们可以在访问网站时根据客户(或其角色)选择不同的布局。

    这使得 UI 具有很大的灵活性。它还允许您更轻松地编写一次视图逻辑,并避免在多个地方重复。*

    详情请见Where and how is the _ViewStart.cshtml layout file linked?

    【讨论】:

      【解决方案3】:

      _Layout 是您所有视图的模板/框架/母版页。它使您免于在您创建的每个新视图中添加菜单、侧边栏、html 头或 javascript/css 等内容。使用布局页面获取围绕视图呈现的“包装”html。

      【讨论】:

      • 是否所有页面都必须使用布局?还是不是所有只显示不使用 javascript 或其他的 html 的页面?
      猜你喜欢
      • 1970-01-01
      • 2016-09-24
      • 1970-01-01
      • 1970-01-01
      • 2023-04-02
      • 2011-04-15
      • 2017-04-10
      • 2012-03-19
      相关资源
      最近更新 更多