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. 【转】kafka&zookeeper集群搭建指南

    [转自]:http://www.cnblogs.com/luotianshuai/p/5206662.html 待续...

  2. eclipse javaee 插件安装

    eclipese 精简版安装java ee插件 , 按图走  (eclipse 版本 : Indigo Service Release 1   (3.7.1)) java ee 在线安装地址: htt ...

  3. c++多继承浅析

            图一                                                                                       图二 ...

  4. JS学习笔记(6)--音乐播放器

    说明(2017.3.15): 1. lrc.js里面存储LRC歌词的格式的数组,获取里面的时间轴,转为秒数. 2. 通过audio.currentTime属性,setinterval每秒获取歌曲播放的 ...

  5. jsp c标签不遍历的方法

    生产中遇到过不需要遍历的事情. 一般遍历必须要 <c:forEach items="${resultObj.xxx}" var="data" varSta ...

  6. 为gridview的每个单元格添加鼠标悬停提示文本(tooltip)

    protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)    {        for (int i ...

  7. redis调优

    1.先把持久化数据备份一份,然后使用rdb分析工具分析一下大的键值2.然后DBA删除一部分不用的3.然后再配置最大内存 千万不要没清理数据就直接把内存限制较小 那样会触发redis对内存达到限制的处理 ...

  8. YAML的使用

    YAML 语言教程 编程免不了要写配置文件,怎么写配置也是一门学问.                                      YAML 是专门用来写配置文件的语言,非常简洁和强大,远 ...

  9. 教你如何做一个优雅的Ecmascripter /转

    看看这些被同事喷的JS代码风格你写过多少 殷荣桧 JavaScript 今天 现在写代码比以前好多了,代码的格式都有eslint,prettier,babel(写新版语法)这些来保证,然而,技术手段再 ...

  10. sparkR could not find function "textFile"

    Yeah, that’s probably because the head() you’re invoking there is defined for SparkR DataFrames[1] ( ...