Sae*_*eid 44 .net c# asp.net asp.net-mvc asp.net-mvc-3
我正在使用带有Razor视图的ASP.NET MVC 3.如果要创建视图,可以为视图选择布局(母版页),或者选择"默认"(_Layout).
我很有兴趣在创建视图后更改此布局而不重新创建它,是否有任何地方存储有关视图的布局信息?我该怎么改变它?
Sae*_*eid 69
在MVC3中,您可以_ViewStart.cshtml存储所有页面的布局; 您可以更改此元素以更改所有页面的布局,或者您可以在@{}块中的目标视图页面顶部添加新的布局元素,如下所示,以更改特定页面的布局:
@{
Layout = "~/Views/Shared/_newLayout.cshtml";
ViewBag.Title = "Index";
}
Run Code Online (Sandbox Code Playgroud)
Chu*_*ris 22
在cshtml文件的顶部创建视图后,您可以看到包含的布局.
@{
Layout = "~/Views/Shared/_Layout.cshtml";
}
Run Code Online (Sandbox Code Playgroud)
您可以简单地替换它,例如使用不同的布局
@{
Layout = "~/Views/Shared/_Layout2.cshtml";
}
Run Code Online (Sandbox Code Playgroud)
此外,您可以将其存储在基本布局(_ViewStart.cshtml)中,然后您的所有视图都将使用该布局.
Tob*_*s J 20
根据您的需要,有多种方法可以为视图指定不同的布局:
如其他答案所述,只需更改视图的Layout属性:
@{
Layout = "~/Views/Shared/_CustomLayout.cshtml";
}
Run Code Online (Sandbox Code Playgroud)
MVC 3 添加了一个默认值 Views/_ViewStart.cshtml,您可以在其中放置所有视图共享的逻辑.您还可以_ViewStart.cshtml在任何Views子目录中创建其他文件以获取其他自定义逻辑(它将在层次结构和Shared文件夹中搜索,就像查找任何其他视图或部分视图一样).
将大量业务逻辑纳入其中就像是违反了"关注点分离"原则,但同时它也非常方便.
请注意,它_ViewStart.cshtml继承自StartPage,而不是WebPage,因此它的属性可能与您习惯的属性略有不同(例如,您必须ViewContext完成此操作ViewBag).
@{
if (ViewContext.ViewBag.IsAdmin) // or other custom logic
{
Layout = "~/Views/Shared/_AdminLayout.cshtml";
}
else
{
Layout = "~/Views/Shared/_Layout.cshtml";
}
}
Run Code Online (Sandbox Code Playgroud)
该View()方法有一个重载,它采用一个显式的布局页面(Intellisense将其称为"主页面"):
public ActionResult FooAction()
{
var model = new MyModel();
return View("Index", "_CustomLayout", model);
}
Run Code Online (Sandbox Code Playgroud)
我们可以使用以下代码在_ViewStart文件中更改布局的默认呈现:
@{
var controller = HttpContext.Current.Request.RequestContext.RouteData.Values["Controller"].ToString();
string layout = "";
if (controller == "Admin")
{
layout = "~/Views/Shared/_AdminLayout.cshtml";
}
else
{
layout = "~/Views/Shared/_Layout.cshtml";
}
Layout = layout;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
85265 次 |
| 最近记录: |