一、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>