[ASP.NET MVC 5 高级编程] 第3章 视图

第3章 视图##

概述

视图的作用
渲染HTML界面

控制器向视图传递数据
ViewBag.
模型,模型视图. @model ProjectName.Models.something //完全限定
通过在~/Views/web.config 文件中添加namespace来避免每次使用完全限定

视图约定
目录/文件名称/选择
return View(); //与控制器动作同名的视图
return View("Else");//指定控制器下Else视图
return View("~Views/Con1/Index.cshtml"); //指定完整路径

强类型视图
使用模型对象等可以获得智能感知/编译器检查等好处
return View(someModel); //传递模型对象

Razor语法

HTML编码
Razor表达式用HTML自动编码,并不会显示HTML标记
若要显示HTML标记可以使用视图辅助类(@HTML,IHtmlString接口的实例)
若要显示不经过HTML编码的文本,使用HtmlString的实例或者Html.Raw(sometext);

在JavaScript中使用用户提供的Razor变量值时,要使用JavaScript字符串编码而不仅仅是HTML编码,要使用@Ajax.JavaScriptStringEncode()方法对用户输入进行编码.这样可避免XSS攻击.如:

代码块
@{ something big }

隐式/显示表达式
@model.Name 1 + 2 = @(1+2)

文本和标记结合
Item @item.Name

代码块/标记结合
@if(show){Show Text}

组合方式
代码块,文本,标记,显示表达式,隐式表达式,视图辅助类

转义与注释
@@显示"@", @* something *@ 注释

调用泛型方法
由于泛型方法中使用了尖括号,需要使用显示表达式

RenderBody

语法:
@RenderBody() //视图在布局中的位置

RenderSection

语法:
@section Footer { something } //在布局中定义
@RenderSection("Footer",required:false) //在视图中使用
@if(IsSectionDefined("Footer"){ ... } //判断节是否有定义

说明:
默认使用节时,required不需要写,所有需要每个视图都要提供节定义.

ViewStart

说明:
_ViewStart.cshtml //指定默认布局,视图中不指定时使用此设置
@{ Layout="~/Views/Shared/_Layout.cshtml"; } //指定视图

PartialView

语法:
C#:Return PartialView([ViewName]);

说明:
部分视图不能指定布局
可以结合Ajax使用,get时返回部分视图内容并加载到相应元素

posted @ 2016-07-22 15:52  大镜空  阅读(405)  评论(0)    收藏  举报