zoukankan      html  css  js  c++  java
  • 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为自定义标签 可以自己改动 。未完待续。。。。。。

    业精于勤荒于嬉 行成于思毁于随
  • 相关阅读:
    MySQL事物原理及事务隔离级别
    sql中in和exists的原理及使用场景。
    PHP实现多继承
    磁盘inode节点被占满的解决方法
    使用uwsgi和gunicorn部署Django项目
    python自学经验,每天进步一点点
    msyql 5.7安装遇到的坑
    shell 三剑客
    nginx 配置
    websphere 新建profile
  • 原文地址:https://www.cnblogs.com/mistor/p/2652745.html
Copyright © 2011-2022 走看看