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. 三、为什么String在Java中是不可更改的

    String在Java中是个不可更改的类.一个不可更改的类简单来说就是这个类的所有实例是不可以更改的.所有的实例信息在创建的时候被初始化而且信息是不可以更改的.不可更改的类有很多好处.这篇文章总结了为 ...

  2. Spark的基本说明

    1.关于Application 用户程序,一个Application由一个在Driver运行的功能代码和多个Executor上运行的代码组成(工作在不同的节点上). 又分成多个Job,每个Job由多个 ...

  3. tortisegit 创建分支和合并分支

    第一步:创建本地分支 点击右键选择TortoiseGit,选择Create Branch…,在Branch框中填写新分支的名称(若选中”switch to new branch”则直接转到新分支上,省 ...

  4. USB设备驱动程序学习笔记(二)

    一.usbmouse_as_key.c /* * drivers\hid\usbhid\usbmouse.c */ #include <linux/kernel.h>#include &l ...

  5. maven项目install时候一直报错,检查Maven-javadoc-plugin声明错误(Java 8 配置Maven-javadoc-plugin)或者是:警告: @throws 没有说明

    在升级JDK至1.8之后,使用Maven-javadoc-plugin插件打包报错,[ERROR] Failed to execute goal org.apache.maven.plugins:ma ...

  6. 自定义maven变量以及maven内置常量

    本文转自:http://zheng12tian.iteye.com/blog/1770909 在创建Maven工程后,插件配置中通常会用到一些Maven变量,因此需要找个地方对这些变量进行统一定义,下 ...

  7. si4438 与 si4432通讯

    http://www.nicerf.cn/_d275147664.htm http://wenku.baidu.com/view/2109573caf1ffc4ffe47ac8c.html si446 ...

  8. ExtJs 常用小技巧备忘录

    1. ExtJs 给fieldLabel与fieldInput添加样式{给Input标签加入图标}http://www.w3school.com.cn/cssref/pr_background.asp ...

  9. java clone对象

    本文转载至 http://blog.csdn.net/shootyou/article/details/3945221 现在Clone已经不是一个新鲜词语了,伴随着“多莉”的产生这个词语确实很“火”过 ...

  10. 篇三:XPath--解析Html

    导语:爬虫爬取的界面,大致分为静态界面.ajax异步加载.动态界面.静态界面直接获取HTML对象,然后使用XPath获取值 最有用的路径表达式: 表达式 描述 nodename 选取此节点的所有子节点 ...