在MVC中,页面何时应该使用布局?

13 浏览
0 Comments

在MVC中,页面何时应该使用布局?

什么时候应该使用layout或render layout?我有点困惑,不知道何时应该创建一个使用layout的页面。

区别在于

@{

Layout = null;

}

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

0
0 Comments

在MVC模式中,_Layout是一个模板/框架/母版,用于所有视图。它可以避免在每个新视图中添加菜单、侧边栏、html头部或javascript/css引用等元素。通过使用布局页面,可以在视图周围生成“包装”html。

然而,是否所有页面都必须使用布局?是否只显示不使用javascript或其他内容的html页面不需要使用布局?

这个问题的出现原因是,有时候我们可能有一些非常简单的页面,只是显示一些静态的html内容,没有使用任何javascript或其他复杂的功能。在这种情况下,使用布局可能会显得多余和不必要,因为它会增加额外的代码和复杂性。

解决这个问题的方法是,我们可以选择不使用布局,而是直接在视图中编写所需的html代码。这样可以减少冗余的代码并简化页面的结构。如果后续需要添加更多功能或模块,再考虑使用布局来提高代码的可重用性和维护性。

总结起来,是否使用布局取决于页面的复杂性和功能需求。对于简单的静态页面,可以直接在视图中编写html代码,而对于复杂的功能页面,则可以使用布局来提高代码的可重用性和维护性。

0
0 Comments

问题的出现的原因是在ASP.NET MVC 3 Beta版本中,引入了_ViewStart.cshtml文件,可以用来在每个View渲染开始时执行一些通用的视图代码。这样就不需要在每个视图文件中显式设置Layout属性了。

解决方法是在_ViewStart.cshtml文件中编写代码,将每个视图的Layout属性默认设置为SiteLayout.cshtml文件。此外,由于_ViewStart.cshtml允许编写代码,还可以根据访问站点的设备类型或用户角色等条件来选择不同的Layout模板,从而实现更丰富的UI灵活性。

这样的设计使得视图逻辑只需编写一次,避免了在多个地方重复编写。详情请参考Stack Overflow上的这个问题:Where and how is the _ViewStart.cshtml layout file linked?

0
0 Comments

在MVC中,页面何时应该使用布局是一个常见的问题。布局文件(_Layout)类似于ASP.NET WebForms中的主页面(masterpage)。如果你想要在许多页面之间应用一个共同的主题(菜单、样式等),那么将布局文件放在_Layout中是最好的选择。

你可以为整个应用程序使用一个单独的_Layout文件,也可以为每个特定模块使用一个单独的_Layout文件。

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

如果你使用以下代码,那么相应的页面将重置布局为null,并且不会渲染_ViewStart中定义的布局。_ViewStart文件中的代码在每个视图开始时执行。

@{

Layout = null;

}

如果你想要在页面上使用特定的布局来覆盖_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;

}

根据以上内容,我们可以总结出问题的原因和解决方法:在MVC中,页面应该使用布局时,我们需要在_Layout文件中定义公共的主题,并在_ViewStart文件中引用_Layout页面。如果要覆盖默认布局,可以在单独的视图文件中设置Layout属性。或者,可以根据控制器的不同选择不同的布局主题。

0