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层的更多相关文章

  1. 《ASP.NET MVC 5 破境之道》:第一境 ASP.Net MVC5项目初探 — 第三节:View层简单改造

    第一境 ASP.Net MVC5项目初探 — 第三节:View层简单改造 MVC默认模板的视觉设计从MVC1到MVC3都没有改变,比较陈旧了:在MVC4中做了升级,好看些,在不同的分辨率下,也能工作得 ...

  2. DAO层,Service层,Controller层、View层 的分工合作

    DAO层:DAO层主要是做数据持久层的工作,负责与数据库进行联络的一些任务都封装在此,DAO层的设计首先是设计DAO的接口,然后在Spring的配置文件中定义此接口的实现类,然后就可在模块中调用此接口 ...

  3. 浅析Yii2的view层设计

    Yii2.0的view层提供了若干重要的功能:assets资源管理,widgets小组件,layouts布局... 下面将通过对Yii2.0代码直接进行分析,看一下上述功能都是如何实现的,当然细枝末节 ...

  4. [转]DAO层,Service层,Controller层、View层

    来自:http://jonsion.javaeye.com/blog/592335 DAO层 DAO 层主要是做数据持久层的工作,负责与数据库进行联络的一些任务都封装在此,DAO层的设计首先是设计DA ...

  5. 微信上传文章素材—ASP.NET MVC从View层传数据到Controller层

    View层: $('#btnNews').click(function() { if (!confirm('确定要提交吗?')) { return; } var frontViewData = []; ...

  6. iOS应用架构谈(三):View层的组织和调用方案(下)

    iOS客户端应用架构看似简单,但实际上要考虑的事情不少.本文作者将以系列文章的形式来回答iOS应用架构中的种种问题,本文是其中的第二篇,主要讲View层的组织和调用方案.下篇主要讨论做View层架构的 ...

  7. iOS应用架构谈(二):View层的组织和调用方案(上)

    OS客户端应用架构看似简单,但实际上要考虑的事情不少.本文作者将以系列文章的形式来回答iOS应用架构中的种种问题,本文是其中的第二篇,主要讲View层的组织和调用方案.上篇主要讲View层的代码结构. ...

  8. iOS应用架构谈(二):View层的组织和调用方案(中)

    iOS客户端应用架构看似简单,但实际上要考虑的事情不少.本文作者将以系列文章的形式来回答iOS应用架构中的种种问题,本文是其中的第二篇,主要讲View层的组织和调用方案.中篇主要讨论MVC.MVCS. ...

  9. iOS应用架构谈 view层的组织和调用方案

    当我们开始设计View层的架构时,往往是这个App还没有开始开发,或者这个App已经发过几个版本了,然后此时需要做非常彻底的重构. 一般也就是这两种时机会去做View层架构,基于这个时机的特殊性,我们 ...

  10. Controller将Model数据传给View层,View层应该如何处理?

    首先,我们在Model层中添加一个Person类. namespace MVCTest.Models{    public class Person    {        public string ...

随机推荐

  1. 使用 Electron 构建桌面应用(拖动控制篇)

    使用 Electron 构建桌面应用(拖动控制篇) 当窗口被定义了大小,我们也就是在自定义这个窗口,使得它不可拉伸没有框架,让它看起来就像一个真正的声效器浮在桌面上. 现在问题来了 – 要如何移动或者 ...

  2. 检测SqlServer数据库是否能连接的小技巧

    有时候可能需要检测下某台机器的服务是不是起来了,或者某台机器的某个库是不是能被连接又不能打开ssms也不想登陆服务器的话就可以用这个方法. 1.在桌面上右键创建个文本,然后改后缀名为udl以后保存(1 ...

  3. fileupload 上传execl文件的一些操作

    OABaseReadExeclDataAction .class 包含创建临时文件目录,基本校验,取属性值,处理乱码,基类 这里在上传文件是execl并且需要读取的话,需要把fileitem对象转换成 ...

  4. 怎样使GridView中满足某个条件的行可编辑,其余行不可编辑?

    DXperience是个很优秀的第三方控件包,使用起来非常方便,但有时候某些功能的实现在文档中不太容易找到解决方案,比如下面要提到的这个功能我就在文档中找了很久也没找到,最后还是在官方论坛上找到的. ...

  5. SecureCRT连接AWS EC2云主机密码登录

    申请了亚马逊的EC2,要通过ssh 加密钥的形式登录,特别麻烦,而且感觉ssh登录AWS的云主机后好卡,这里是更改成用户名和密码的形式登录云主机,可以通过SecureCRT直接登录 1.首先通过ssh ...

  6. HTTP小结

    http 一.HTTP协议简介 HTTP是hypertext transfer protocol(超文本传输协议)的简写,它是TCP/IP协议的一个应用层协议,用于定义WEB浏览器与WEB服务器之间交 ...

  7. hdu2222 KeyWords Search AC自动机入门题

    /** 链接:http://acm.hdu.edu.cn/showproblem.php?pid=2222 题意:题意:给定N(N <= 10000)个长度不大于50的模式串,再给定一个长度为L ...

  8. find 命令一个命令多参数如何使用,????,perm

    [root@ob2 mytmp]# find -mtime -7 -type f \( -name "*.html" -o -name "*.tar.gz" \ ...

  9. Applet Mode

    https://github.com/threerings/getdown/wiki/Applet-Mode ————————————————————————————————————————————— ...

  10. zend opcache的最佳设置

    2016-01-21 在网上无意中看到的一篇文章,这哥们非常简洁地谈论了zend opcache的最佳设置,他说他为此花了大量的时间探索zend opcache的每个设置选项的细节,甚至是阅读它的源代 ...