mvc 4 razor语法

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.其他

电子邮箱可以自动识别,例如:[email protected]

被误认为是电子邮箱的请加括号(),例如: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语法讲解和使用

08-31 MVC4 乐学网 3641 views

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.其他

电子邮箱可以自动识别,例如:[email protected]

被误认为是电子邮箱的请加括号(),例如: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特性,我们实现了对对象的缓存。因此当发生重复请求时,就可以自动输出缓存信息避免频繁查询数据库,减轻服务器负担和提高响应速度

时间: 2024-10-25 11:19:09

mvc 4 razor语法的相关文章

【转载】【MVC 学习 Razor语法】

Razor是MVC3中才有的新的视图引擎.我们知道,在ASP.NET中,ASPX的视图引擎依靠<%和%>来调用C#指令.而MVC3以后有了一套新的使用@标记的Razor语法,使用起来更灵活更简洁.下面通过一些简单示例让大家快速撑握Razor语法的使用. 准备工作 在演示Razor语法的使用之前,我们需要做一些准备工作. 1.打开VS创建一个ASP.NET MVC空项目,很简单,就不具体演示了. 2.添加一个Model.在项目的Models文件夹中添加一个名为Product的类.在这我们把前一篇

.net MVC,Razor语法详细介绍

MVC框架 Model View Controller,其实是业务层和视图层的框架. 该框架的特点是: 1.业务层非常清晰,一个控制器里的一个Action只完成一件事情. 2.与视图交互逻辑也非常清晰,通过Model传递,或者说将业务处理完成的数据,封装成视图模型,传给视图,还提供了ViewBag属性,传递一些未封装在视图模型里的参数. 3.提供了路由技术,以此可以简化URL,并能非常方便的写出伪静态. 4.提供了参数绑定特性BindAttribute,能够方便快捷的获取Request里的参数,

MVC之Razor语法

Razor是MVC3中才有的新的视图引擎.我们知道,在ASP.NET中,ASPX的视图引擎依靠<%和%>来调用C#指令.而MVC3以后有了一套新的使用@标记的Razor语法,使用起来更灵活更简洁.下面通过一些简单示例让大家快速撑握Razor语法的使用. 准备工作 在演示Razor语法的使用之前,我们需要做一些准备工作. 1.打开VS创建一个ASP.NET MVC空项目,很简单,就不具体演示了. 2.添加一个Model.在项目的Models文件夹中添加一个名为Product的类.在这我们把前一篇

从项目经理的角度看.net的MVC中Razor语法真的很垃圾.

我们知道,Razor语法中我们可以直接使用@if(){}等代码段,这使得.net程序员在写模版时更容易了. 对比如下: 语法名称 Razor 语法 Web Forms 等效语法 代码块(服务端) @{ int x = 123; string y = "test."; } <% int x = 123; string y = "test."; %> 表达式 encode:<p>@model.Message</p> no encode

mvc 4 razor语法讲解和使用

Razor语法的分类 @using : 引入命名空间 @model :声明强类型的数据model类型 @section :定义要实现母版页的节的信息 @RenderBody():当创建基于页面的布局时,视图的内容会和布局页合并,而新创建的视图的内容会通过布局页面的@RenderBody方法呈现在标签之间. @RenderPage :呈现一个页面.比如网页中固定的头部可以单独放在一个共享视图文件中,然后在布局也免中通过这个方法调用,例如 @RenderPage("~/Views/Shared/_H

MVC – 7.Razor 语法

7.1 Razor视图引擎语法 Razor通过理解标记的结构来实现代码和标记之间的顺畅切换. @核心转换字符,用来 标记-代码 的转换字符串. 语境A: @{ string rootName="GZCZ"; } <span>@rootName.Models</span> 错误 <span>@(rootName).Models</span> 语境B: <span>[email protected]</span> 通过

Asp.net MVC]Asp.net MVC5系列——Razor语法

目录 概念 Razor语法 总结 系列文章 [Asp.net MVC]Asp.net MVC5系列--第一个项目 [Asp.net MVC]Asp.net MVC5系列--添加视图 [Asp.net MVC]Asp.net MVC5系列--添加模型 [Asp.net MVC]Asp.net MVC5系列--从控制器访问模型中的数据 [Asp.net MVC]Asp.net MVC5系列--添加数据 [Asp.net MVC]Asp.net MVC5系列--在模型中添加验证规则 [Asp.net

ASP.NET MVC中的Razor语法

1.Razor的基本语法 @* 多行代码时需要包含在大括号内{}和每句代码后都需要加分号; *@ @{ ViewBag.Title = "Index"; ViewBag.Name = "Linq"; ViewBag.IsOk = false; List<string> list = new List<string>() { "11", "22", "33", "44&quo

MVC Razor 语法(转)

http://blog.csdn.net/pasic/article/details/7072340 原文地址:MVC Razor 语法(转)作者:panzhaowen_jacki 语法名称 Razor 语法 Web Forms 等效语法 代码块 @{ int x = 123; string y = "because."; } <% int x = 123; string y = "because."; %> 表达式(默认encode) <span