mvc 4 razor语法讲解和使用
1.这里的 @{Layout="文件路径";} 代码块指定了整个项目默认所使用的布局文件(如图:)
@RenderBody()对于所有的页面默认的情况下都会使用这个布局(WebForm的模板)
@RenderBody()相当于一个占位符其他页面的所有内容都会被引擎渲染在这个地方。
@RenderSecion()这个占位符表示:在这里会渲染页面里面的一个节(可以是html代码也可以是c#代码和Html的结合体)。
@RenderSection("scripts", required: false)做一个补充说明,第一个参数指明:在子页面被渲染的节的名称,第二个参数:指定子页面这个节是否是必需的,如果指定了required:true;但是在子页面没有给这个名称的节的话,编译是通不过的。
Razor语法的分类
@using : 引入命名空间
@model :声明强类型的数据model类型
@section :定义要实现母版页的节的信息
@RenderBody():当创建基于页面的布局时,视图的内容会和布局页合并,而新创建的视图的内容会通过布局页面的@RenderBody方法呈现在标签之间。
@RenderPage :呈现一个页面。比如网页中固定的头部可以单独放在一个共享视图文件中,然后在布局也免中通过这个方法调用,例如 @RenderPage("~/Views/Shared/_Header.cshtml")
@RenderSection:布局页面还有节点(section)的概念,便于局部呈现
1.行内(inline)C#(服务器端代码)形式(行内代码)
@变量例如:@User.Name,变量或属性结束后,任何形式文本或者标签都自动被解析为html,如遇结束判断有歧义,请加括号如下
@( 表达式 ) 例如:@(i + 1) 或 @(User.Name) 括号里面为:表达式,或者变量
@方法调用 例如:@Html.TextBox("UserName").ToString()
2. 代码块
第一种情况:
@{ 代码块 }
@if (条件) { 代码块 }
@switch (条件) { 分支匹配代码块 }
@for (循环控制) { 代码块 }
@foreach (循环控制) { 代码块 }
@while (循环控制) { 代码块 }
@do { 代码块 } while (循环控制) 『 代码块里面的代码要严格按照c#语法来,每行结束必需有分号』
第二种情况:(代码块中的文本或者Html客户端标签)
单行文本
@:行内文本 换行的话自动变成了C#服务器端代码。
多行文本
任何标签对 例如:<div>多行文字</div>
任何自闭合标签 例如:<img 多行属性 />
纯文字使用伪标签<text> 例如:<text>多行文字,两侧标签不会被输出</text>
3.其他
电子邮箱可以自动识别,例如:123456@qq.com
被误认为是电子邮箱的请加括号(),例如:123456(@UserName)
要输出商标版权等的,请用@字符转义,例如:@@ →会输出单个字符@
HtmlHelper和AjaxHelper
Html.BeginForm的两种写法:
第一种使用Using语句:
|
1
2
3
4
|
using(Html.BeginForm()){ } |
第二种使用代码块闭合的形式(注意form是代码块形式的不是行内代码:所以结尾必需有分号)
|
1
2
3
|
{Html.BeginForm();} {Html.EndForm();} |
Ajax.BeginForm()的写法只有一种:因为我并没有看到Ajax.EndForm()。呵呵估计是微软的开发团队开发Razor引擎的时候漏掉了
|
1
2
3
4
|
using (Ajax.BeginForm(new AjaxOptions { UpdateTargetId="",OnSuccess=""})) {} |
这里要想Ajax的Form有效的话我们必须在view页面引入支持Ajax的Js脚本。如下:
|
1
|
Scripts.Render("~/bundles/jqueryval") |
这个是微软的脚本捆绑技术,实际上捆绑的就是(以下的JS代码)

不难看到其中就有ajax的Javascript脚本
对于AjaxForm的提交参数的指定:
当异步请求成功时,会去使用后端返回的内容局部更新UpdateTargetId所指定的客户端的html标签内容,然后调用OnSuccess指定的客户端的JS方法。
具体参数说明可以参照MSDN:
OnSuccess:http://msdn.microsoft.com/zh-cn/library/system.web.mvc.ajax.ajaxoptions.onsuccess(v=vs.108).aspx
对于Razor智能感知的一点补充
在微软的cshtml页面,@后面跟一些对象的时候会自动出现智能感知

当我们自定义一个类,让后想让这个类在Razor引擎有只能感知能力的时候。我们可以找到
Views/Web.config文件,打开文件我们会发现如下的节点:
|
1
2
3
4
5
6
7
8
9
10
11
12
|
<system.web.webPages.razor> <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> <pages pageBaseType="System.Web.Mvc.WebViewPage"> <namespaces> <add namespace="System.Web.Mvc" /> <add namespace="System.Web.Mvc.Ajax" /> <add namespace="System.Web.Mvc.Html" /> <add namespace="System.Web.Optimization"/> <add namespace="System.Web.Routing" /> </namespaces> </pages> </system.web.webPages.razor> |
我们只要把我们的类所在的命名空间添加进去就可以了。
Razor的一些实用功能(极大的灵活性)
Partial Page Output Caching(部分页输出缓存)
我们可以使用@Html.Action()来请求一个处理方法,并将放返回的Model或者ViewModel对象渲染到页面。


通过使用OutputCache特性,我们实现了对对象的缓存。因此当发生重复请求时,就可以自动输出缓存信息避免频繁查询数据库,减轻服务器负担和提高响应速度
mvc 4 razor语法讲解和使用的更多相关文章
- MVC之Razor语法
Razor是MVC3中才有的新的视图引擎.我们知道,在ASP.NET中,ASPX的视图引擎依靠<%和%>来调用C#指令.而MVC3以后有了一套新的使用@标记的Razor语法,使用起来更灵活 ...
- 从项目经理的角度看.net的MVC中Razor语法真的很垃圾.
我们知道,Razor语法中我们可以直接使用@if(){}等代码段,这使得.net程序员在写模版时更容易了. 对比如下: 语法名称 Razor 语法 Web Forms 等效语法 代码块(服务端) @{ ...
- 【转载】【MVC 学习 Razor语法】
Razor是MVC3中才有的新的视图引擎.我们知道,在ASP.NET中,ASPX的视图引擎依靠<%和%>来调用C#指令.而MVC3以后有了一套新的使用@标记的Razor语法,使用起来更灵活 ...
- MVC – 7.Razor 语法
7.1 Razor视图引擎语法 Razor通过理解标记的结构来实现代码和标记之间的顺畅切换. @核心转换字符,用来 标记-代码 的转换字符串. 语境A: @{ string rootName=&quo ...
- MVC之——Razor语法
实例产品基于asp.net mvc 5.0框架,源码下载地址:http://www.jinhusns.com/Products/Download View里所有以@开头或@(/*代码*)的部分代码都会 ...
- MVC – 7.Razor 语法
7.1 Razor视图引擎语法 Razor通过理解标记的结构来实现代码和标记之间的顺畅切换. @核心转换字符,用来 标记-代码 的转换字符串. 语境A: @{ string rootName=&quo ...
- ASP.NET MVC 3 Razor 语法
1. 三元运算符 1) 输出文本 1. View var var1 = '@(1 < 2 ? "YES" : "NO")'; var var2 ...
- Razor语法&ActionResult&MVC
Razor代码复用 mvc 4 razor语法讲解和使用 了解ASP.NET MVC几种ActionResult的本质:EmptyResult & ContentResult 了解ASP.NE ...
- .Net MVC 入门之Razor语法
Razor语法 Razor是以后MVC项目中都需要用的, 所以在学MVC的基础的时候,我们的目标:要了解熟悉Razor页面的语法结构,做到灵活使用,so我们马上开始学习Razor,也请你们多评论和推荐 ...
随机推荐
- Oracle在归档模式下恢复
=============== 数据库的完全恢复 =============== 在归档模式下数据库完全恢复时,数据库所经过的状态如下: 1.利用备份修复(Restores)损坏或丢失的数据文件,即将 ...
- [http session]
原文链接:http://lavasoft.blog.51cto.com/62575/275589/ 1.Session创建的时间是: 一个常见的误解是以为session在有客户端访问时就被创建,然而事 ...
- 转!!URL 传+号到后台变空格问题解决方案
网上很多解决方法,但是前提是get请求(或者是post请求后面追加的参数),让我试了很久(我是post),没成功!引以为戒!! 今天在调试客户端向服务器传递参数时,参数中的“+”全部变成了空格,原因是 ...
- C#连接数据库的新方法(通过web.config配置文件)
分类: asp.net技术 2009-07-08 19:40 183人阅读 评论(0) 收藏 举报 方法一. 1.web.config中<configuration>下加入以下连接代码 ...
- python核心编程第六章练习6-13
6-13.字符串.string模块包含三个函数,atoi(),atol()和atof(),他们分别负责把字符串转换成整型.长整型和浮点型数字.从Python 1.5起,Python的内建函数int() ...
- 电脑的f5刷新不了
新买的电脑,f5刷新不了页面,网上查了后发现是fn功能键的原因.同时fn+f5即可刷新.可是依然感觉好别扭... 按下fn+esc,再只按f5,就可以刷新页面了.神奇...
- [转]深入理解Java 8 Lambda(语言篇——lambda,方法引用,目标类型和默认方法)
以下内容转自: 作者:Lucida 微博:@peng_gong 豆瓣:@figure9 原文链接:http://zh.lucida.me/blog/java-8-lambdas-insideout-l ...
- 存储过程实现登录(.net)
工作中,可能有时为了安全等的考虑,需要更多 的运用存储过程.有的公司甚至在登录一栏也会提出这样的要求,那么怎么用存储过程实现登录呢.好处就不用言名了,一个速度,一个就是安全系统更高. 下面贴上:1.存 ...
- 用Handler图片轮播练习
XML代码 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:andr ...
- AJAX浏览器判断
第一步要先获取对象: var xmlHttp; 第二是判断浏览器 function getXmlHttp(){ if(window.ActiveXObject){ xmlHttp = new Acti ...