MVC3--View层
Razor二义性:
1,当view层中出现 邮件格式时候比如 anbylau2130@qq.com 这种情况Razor将会出现多义性
可以使用@@来转义为一个@字符,
如:<p>you must follow @james,@jessica,@Andy</p> 这里Razor会以变量的形式解释james,jessica,andy,
这不是我们想要的效果,所以可以使用@@来转义<p>you must follow @@james,@@jessica,@@Andy</p>
但是Razor内部做了一般邮箱的识别,
如:item_@items.Length可能会识别为邮箱地址,那么这时可以在后面加上item_(@items.Length)来计算后面的值
Html编码
1, Razor表达式是Html编码的
{
@string message ="<script>alert('warning')</script>"
}
<div>@Message</div> 这里就不会弹出对话框,而是编码后的html文本
如果要显示一个对话框
1,可以使用HtmlString的实例,
2,可以使用@Html.Raw(message)
应尽可能的避免脚本注入
2,如果要在脚本中使用Razor语法,那么最好的解决方案便是 使用@Ajax.JavaScriptStringEncode(ViewBag.UserName)
代码块
@foreach(var item in lst)
{
<li>this is @item</li>
}
@{
语句
}
注释:@**@
布局
@{layout=~/Views/Shared/SiteLayout.cshtml}
@RenderBody()相当于web form中的Placehold控件
@RenderPatitial() 进行部分视图的绘制
如果Layout也中定义 <footer>@RenderSection("Footer")</footer>
在布局页中使用
如:index.cshtml中使用以下标签来呈现用户的内容
@section Footer{
this is a footer
}
footer节点是可选择的如:<footer>@RenderSection("Footer",false)</footer>
也可以如下方法
<footer>
@if (IsSectionDefined("Footer"))
{
RenderSection("Footer");
}
else
{
<p>has no section</p>
}
</footer>
如果在controller中直接返回PartialView(); 那么,视图中将不加载任何布局_Layout.cshtml文件中的内容
在下面的布局中为了减少代码的冗余,采用这种方式 _Layout.cshtml中
@if (ViewBag.Header == )
{
<script type="text/javascript" src="/js/jquery.loadmask.min.js"></script>
}
else
{
<script type="text/javascript" src="/js/jquery.js"></script>
}
index.cshtml中则在布局头部使用
@{
Layout = "~/Views/Shared/_Layout.cshtml";
ViewBag.Header = ;
} 来加载相应的视图内容
当将分布视图加载带某个页面时可以使用以下方法
<div id="result"></div>
<script>
$(function(){
$("#result").load('home/message');
});
</script>
配置加载视图引擎
protected void Application_Start()
{
ViewEngines.Engines.Clear();
ViewEngines.Engines.Add(new myviewEngine()) ;
RegisterRoutes(RouteTable.Routes);
}
Engines是一个静态的ViewEnginesCollection,Razor引擎和WebForm引擎默认是存在的,所以要先Clear()
查找视图
在创建一个自定义视图引擎的时候,IViewEngines要实现一个关键的接口
public interface IViewEngine
{
ViewEngineResult FindView(ControllerContext controllerContext, string viewName, string masterName, bool useCache);
ViewEngineResult FindPartialView(ControllerContext controllerContext, string partialViewName, bool useCache);
void ReleaseView(ControllerContext controllerContext, IView view);
}
FindView,仅在已注册的视图引擎中迭代并调用每一个视图引擎的FindView,然后指定视图名称传递过来,然后ViewEnginesCollection询问每个视图引擎是否可以渲染当前的视图
ViewEngineResult 中存储了是否可以渲染当前视图的答案
view,返回与指定名称对应的并可以找到的Iview实例,如果找不到,返回null
viewEngines,如果能找到一个符合要求的视图,就返回一个IviewEngine实例,否则返回null
searchedlocations返回一个IEnumerable<String> ,其中包含视图引擎搜索到的所有位置、 在实现自定义引擎时Iview接口是需要实现的第二个接口
public interface IView
{
void Render(ViewContent viewcontent,TextWriter txtwriter);
ViewContent 提供自定义视图用到的信息,
HttpContext 封装了asp.net内部对象server,session,request,response
Controller 提供视图引擎的控制器访问
RouteData 对当前路由的访问
ViewData 包含了从Controller传递到视图的数据
TempData 包含了再特殊的单个请求缓存中的数据,由controller传递给视图
View Iview的一个实例。用于渲染
ClientValidationEnable 是否开启客户端数据验证
FormContext 包含客户端验证的窗体信息
FormIdGenerator 允许重写窗体的命名风格
IsChildAction 只是操作是否作为调用Html.Action或者Html.RenderAction
ParentActionViewContext 当IsChildAction==true,包含当前视图的fu视图的ViewContext
Writer HtmlTextWriter使用不返回Html的辅助方法(Html.Form)以便与非WebForm视图兼容
ActionResult还是ViewEngine
原则:它是否对拥有可以知道如何渲染标记的模板文件有意义,如果只有一种方式可以把对象转换为输出格式,那么编写自定义的ActionResult更有意义
MVC3--View层的更多相关文章
- 《ASP.NET MVC 5 破境之道》:第一境 ASP.Net MVC5项目初探 — 第三节:View层简单改造
第一境 ASP.Net MVC5项目初探 — 第三节:View层简单改造 MVC默认模板的视觉设计从MVC1到MVC3都没有改变,比较陈旧了:在MVC4中做了升级,好看些,在不同的分辨率下,也能工作得 ...
- DAO层,Service层,Controller层、View层 的分工合作
DAO层:DAO层主要是做数据持久层的工作,负责与数据库进行联络的一些任务都封装在此,DAO层的设计首先是设计DAO的接口,然后在Spring的配置文件中定义此接口的实现类,然后就可在模块中调用此接口 ...
- 浅析Yii2的view层设计
Yii2.0的view层提供了若干重要的功能:assets资源管理,widgets小组件,layouts布局... 下面将通过对Yii2.0代码直接进行分析,看一下上述功能都是如何实现的,当然细枝末节 ...
- [转]DAO层,Service层,Controller层、View层
来自:http://jonsion.javaeye.com/blog/592335 DAO层 DAO 层主要是做数据持久层的工作,负责与数据库进行联络的一些任务都封装在此,DAO层的设计首先是设计DA ...
- 微信上传文章素材—ASP.NET MVC从View层传数据到Controller层
View层: $('#btnNews').click(function() { if (!confirm('确定要提交吗?')) { return; } var frontViewData = []; ...
- iOS应用架构谈(三):View层的组织和调用方案(下)
iOS客户端应用架构看似简单,但实际上要考虑的事情不少.本文作者将以系列文章的形式来回答iOS应用架构中的种种问题,本文是其中的第二篇,主要讲View层的组织和调用方案.下篇主要讨论做View层架构的 ...
- iOS应用架构谈(二):View层的组织和调用方案(上)
OS客户端应用架构看似简单,但实际上要考虑的事情不少.本文作者将以系列文章的形式来回答iOS应用架构中的种种问题,本文是其中的第二篇,主要讲View层的组织和调用方案.上篇主要讲View层的代码结构. ...
- iOS应用架构谈(二):View层的组织和调用方案(中)
iOS客户端应用架构看似简单,但实际上要考虑的事情不少.本文作者将以系列文章的形式来回答iOS应用架构中的种种问题,本文是其中的第二篇,主要讲View层的组织和调用方案.中篇主要讨论MVC.MVCS. ...
- iOS应用架构谈 view层的组织和调用方案
当我们开始设计View层的架构时,往往是这个App还没有开始开发,或者这个App已经发过几个版本了,然后此时需要做非常彻底的重构. 一般也就是这两种时机会去做View层架构,基于这个时机的特殊性,我们 ...
- Controller将Model数据传给View层,View层应该如何处理?
首先,我们在Model层中添加一个Person类. namespace MVCTest.Models{ public class Person { public string ...
随机推荐
- codeBlocks编译undefined reference to错误
是没有把c文件编译进去的原因. 右键项目,选择属性,弹出窗体 然后选择build targets 在最下面有个build target files:中把c文件勾选.点击ok重新编译即可. Code:: ...
- vue中sass的配置安装流程
1.安装node-sass,因为scss是基于此库的 cnpm install --save-dev node-sass 2.安装sass-loader cnpm install --save-dev ...
- u-boot编译
u-boot目的:启动内核1.从flash读出内核,放到SDRAM中2.启动内核 u-boot要实现的功能:-----硬件相关的初始化---- ---开发的功能--------- 关看门够 ...
- Python的内存管理 小理解
请看下面的一段代码: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 origin = {'a':100,'b':[1,2,34,5]} obj_copy ={}; ...
- logback日志模板与详解
<pattern>的转换符说明: (这部分引用自http://aub.iteye.com/blog/1103685)转换符 作用 c {length } lo {length } logg ...
- js中定义属性和变量
//定义数组 var arr = []; //定义对象 var obj = {}; //定义正则表达式 var reg = /../;
- JavaScript高级 面向对象(10)--onload与jq中ready的区别
说明(2017.4.2): 1. 在body中放一个img标签,src链接一张图片,那么页面会先读取html的document文档,然后再读取外部资源(这里没加onload其实就是从上往下顺序读取). ...
- pionter指针小结
第七章.指针和函数的关系 可以把一个指针声明成为一个指向函数的指针. intfun1(char*,int); int(*pfun1)(char*,int); pfun1=fun1; .... .... ...
- activemq用户手册
1 JMS 在介绍ActiveMQ之前,首先简要介绍一下JMS规范. 1.1 JMS的基本构件 1.1.1 连接工厂 连接工厂是客户用来创建连接的对象,例如ActiveMQ提供的ActiveMQCon ...
- 未能加载文件或程序集Office,Version=11.0.0.0
关于"未能加载文件或程序集“Office, Version=11.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c”或它的某一个 ...