MVC3基础嵌套总结

      MVC3 Razor出现后我们就可以选择不再使用asp.net master 模板页。取而代之的是cshtml razor的模板文件。用法个人认为还是和master模板页类似。但在mater模板页的原有功能上有了进一步扩展,更方便开发。

新建MVC3项目的时候会在View中自动生成_ViewStart.cshtml文件(功能:每个页面加载的时候都会加载这个文件中引用页面(自动生成的模板页)),我们就无需在每一个具体的View页面引入模板页。减少View页面内的重复代码。具体的可以建立一个MVC3 Application 选择razor模板,VS会自动建立上述机制。你也可以自己定义自己的布局页面 如:在Shared文件夹中新建_MyLayout.cshtml页面 将_ViewStart.cshtml文件中的地址改为:

@{
    Layout = "~/Views/Shared/_MyLayout.cshtml";
}

启动的时候就会加载你定义的页面,这样就可以做一个功能如:根据不同的角色或者用户加载不同的布局页面。

小技巧 : 在 ASP.NET MVC3 中,如果一个在View文件夹或Shared文件夹中的视图以"_"开头命名的话,外部是不能单独访问他的,他只能作为局部视图嵌套在其他视图中。为什么?我只能这样解释 因为MVC3的加载机制过程是: 执行Controller → Model → View+_ViewStart.cshtml的顺序,然后把产生的页面带回到原来的View中再回传。

1,@RenderBody()方法:直接渲染整个View到占位符处,而不需要原来所使用的,只能在_Layout.cshtml中使用一次

2,@RenderSection方法。可以让我们在模板页预设一个区域,未来给继承该模板页的View使用。具体请看以下操作:

在MVC3.0 shared文件夹下_Layout.cshtml这个模板文件内加入以下代码:

<!DOCTYPE html>
<html>
<head>
    <title>@ViewBag.Title</title>
    <link href="@Url.Content("~/Content/Site.css")" rel="stylesheet" type="text/css" />
    <script src="@Url.Content("~/Scripts/jquery-1.4.4.min.js")" type="text/javascript"></script>
    @RenderSection("Head", required: false) //当为true的时候 每一个页面都要加@section Head{ 内容} 这个标签,不然就报错。
</head>
<body>
<div class="page">

以上代码第7行,预留出一个Head的section。 熟悉模板页的人,应该明白该处是预留是给未来具体的

View页面自定义特定js/css使用的。
这个View我们就用默认的Home底下的Index来举例。打开index.cshtml 写入以下代码

@{
    ViewBag.Title = "Home Page";
}
<h2>@ViewBag.Message</h2>
@section Head{
    <script type="text/javascript">
        $(function () {
            alert("hello jquery");
        });
    </script>
}

该View已经集成了_Layout.cshtml模板页,这里只是填充模板页内的Head section这时就可以加入我们的针对每个view页面的js或者CSS了。至此达到共性外的个性。
只要你在_Layout.cshtml模板页面加了  @RenderSection("Head", required: true) ,required参数值:true 时候,一定要在其他的视图页面加上

@section Head{
    <script type="text/javascript">
        $(function () {
            alert("hello jquery");
        });
    </script>
}
注意可以随便添加在哪里都可以的,Head为自定义标签 可以自己改动 。未完待续。。。。。。

业精于勤荒于嬉 行成于思毁于随
原文地址:https://www.cnblogs.com/mistor/p/2652745.html