ASP.NET MVC 5 中Views层知识点盘点

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/kingshown_WZ/article/details/88833071

一、View的责任

        View负责将Controller传过来的资料转换为用户端所需的输出格式,所有在View中的代码应该仅止于“呈现数据”这件工作,不应该还有其他用途。

二、Razor语法

        支持C#和VB.NET,Razor页面的文档名称也应该是.csthml或.vbhtml。

1、主要语法规则

2、变量、循环与数组、逻辑

3、Razor的主板页面框架

3.1 Razor页面执行顺序
Controller回传给ViewResult给MvcHandler之后,MvcHandler会先设法找出对应的检视页面,然后Razor页面执行生命周期
被MvcHandler找到Razor页面会优先执行,然后检查这个View页面是否有Layout属性


3.2 关于_ViewStart
3.2.1/View/_ViewStart.cshtml文件会在/View/目录下任何View被截入前就先被截入,任何与Controller同名的View子目录下也能出现相同的_ViewStart.cshtml如此一来就可以不同的Controller对应不同的_ViewStart.cshtml


3.3 _Layout布局页面
3.3.1 _Layout.cshtml和一般的Razor的检视页面差不多,不同的地方是有2个Razor语法,分别是@RenderBody(预设坑洞)与@RenderSection(具名坑洞)

@section Scripts{

       @Scripts.Render()

}

4、@helper辅助方法

        Razor提供了一种很方便的语法,让你可以将View页面中部分内容或部分代码抽取出来,变成一个独立的辅助方法,放在新建的APP_Code文件夹中。

<p>@ShowTime() </p>
@helper ShowTime()
{
    @DateTime.Now;
}

5、@functions自定义函数

        在@helper无法自定义属性,自能单纯地传入参数,然后格式化你想要呈现的样子直接输出。所以Razor还提供@functions自定义函数功能。

<p>@ShowTime() </p>
@functions{
public IHtmlString ShowTime()
{
    return  new HtmlString(DateTime.Now.ToString());
}
}

6、@model引用参数资料型别

7、@using引用命名空间

三、View如何从Action取得数据

        可分为两种方式:使用弱类型取得数据和使用强类型取得数据。

(1)使用弱类型取得数据

        使用ViewData(或ViewBag)、TempData、Session、Model传递

(2)使用强类型取得数据

四、HTML辅助方法

        顾名思义,HTML辅助方法(HTML Helper)就是用来辅助产生HTML之用。

       @HTML.ActionLink()

       @HTML.RouteLink()

       @HTML.Partial()

五、URL辅助方法

        负责产生URL网址。

        @Url.Action()

六、Ajax辅助方法

       @Ajax.ActionLink()

七、Scripts.Render 和 Stytles.Render方法

1、配置BundleConfig.cs文件

(1)首先要在App_Start 里面BundleConfig.cs 文件里面 添加要包含的css文件

(2)BundleConfig就是一个微软新加的 一个打包的配置类

(3)BundleConfig用来Add 各种Bundle

(4)BundleConfig配置信息如图:

public class BundleConfig {
      public static void RegisterBundles(BundleCollection bundles) {
            bundles.Add(new ScriptBundle("~/bundles/jquery").Include("~/Scripts/jquery-{version}.js"));
            bundles.Add(new ScriptBundle("~/bundles/jqueryui").Include("~/Scripts/jquery-ui-{version}.js"));
            
            bundles.Add(new StyleBundle("~/Content1/css").Include("~/Content/site.css"));
            bundles.Add(new StyleBundle("~/Content1/themes/base/css").Include(
                        "~/Content/themes/base/jquery.ui.core.css",
                        "~/Content/themes/base/jquery.ui.resizable.css",
                        "~/Content/themes/base/jquery.ui.selectable.css",
                        "~/Content/themes/base/jquery.ui.accordion.css",
                        "~/Content/themes/base/jquery.ui.autocomplete.css",
                        "~/Content/themes/base/jquery.ui.theme.css"));
        }
    }

(5)配置信息说明

1)上面的"~/Content1" 是虚拟路径,可以随便起名,用于标记打包哪个文件夹下面的.css 文件,后面的Include方法接受的是一个string[] 根据传入的路径去对css文件进行打包。

2)使用Bundle来引用css有个好处 就是可以把多个css文件在一起请求,浏览器只发一次请求 不过必须在Global.asax里面 加一段代码 BundleTable.EnableOptimizations = true 来启用优化。

3)在启用优化后,当页面下次再次发送请求的时候 BundleConfig里面没有更改的话 浏览器会从缓存中去取。


2、使用Scripts.Render、Styles.Render引用BundleConfig中的配置
(1)在视图文件中使用Scripts.Render()输出脚本包,Styles.Render()输出样式包
(2)Script文件引用:@Scripts.Render(virtualPath[,virtualPath1][,virtualPath2][,...])
(3)CSS文件引用:  @Styles.Render(virtualPath[,virtualPath1][,virtualPath2][,...])
(4)实例

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width" />
    <title>@ViewBag.Title</title>
    @Styles.Render("~/Content1/css")
</head>
<body>
    @RenderBody()

    @Scripts.Render("~/bundles/jqueryui")
</body>
</html>

猜你喜欢

转载自blog.csdn.net/kingshown_WZ/article/details/88833071