ASP.NET视图引擎攻略

引子

在桂林等地区,都构建了全面的区域性战略布局,加强发展的系统性、市场前瞻性、产品创新能力,以专注、极致的服务理念,为客户提供网站设计、网站建设 网站设计制作按需求定制设计,公司网站建设,企业网站建设,成都品牌网站建设,营销型网站,成都外贸网站建设,桂林网站建设费用合理。

看下面一段MVC 2.0的代码。

 
 
 
 
  1. <%if (Model != null)  
  2. {%> 
  3.  

    <%=Model%>

     
  4. <%}%> 
  5. <%else  
  6. {%> 
  7.  //Do something  
  8. <%}%> 

我们站在一个读者的立场上来看,”<% %>“这种标记C#代码的方法是十分蛋疼的。

如果写这段代码的人没有良好的缩进和对齐习惯的话,一段逻辑较为复杂的代码就会堆砌着杂乱无章的"<%“和"%>"--匹配它们就是一件头疼的事情,会让读者望而生畏。

即使是写代码的本人,闭合也是一件麻烦的事情,并且VS对”<% %>“的自动缩进和对齐支持不很友好,看惯了整齐的代码,面对自己写出的凌乱的东西会很不爽。

随着MVC 3.0的发布,新的Razor视图引擎解决了这个问题。

Razor的意思的就是 剃刀,可见它灰常犀利。引言中的代码,我们用Razor的语法来写的话:

 
 
 
 
  1. @if (Model != null)    
  2. {  
  3.   

    @Model

     
  4. }  
  5. else  
  6. {  
  7.     //Do something   

Razor使用了"@"来标记一段C#代码,并帮我们进行了内部的闭合,是不是感觉清爽多了?

Razor在减少代码冗余、增强代码可读性和vs 智能感知方面,都有着很大的优势。下面我们来具体的介绍如何在ASP.NET MVC 3.0中使用Razor。

一,创建基于Razor的Web程序

首先你的开发环境必须安装.NET Framework4.0,然后在VS中新建项目时选择ASP.NET MVC 3 应用程序,在选项页面中选择视图引擎为Razor,如图1:

  图1

然后创建项目,就会得到一个基于Razor的Web项目了,如图2。  

   图2

相信熟悉MVC的看官们对此结构并不陌生。注意红框部份,Razor的页面是以cshtml为后缀的,下面我们来讲下如何使用Razor来进行页面布局。

二,使用Razor来进行页面布局

UI设计师们现在也讲究页面设计的语义化和结构化,把一个页面分成很多个模块,使用语义化的类名或id来标识这些模块。Razor推出了新的布局解决方案来迎合这一潮流。

这里涉及到Razor的一些语法,大家可以不深究"@"后面的内容,讲到页面布局,你只要专注与HTML代码就可以了。语法会在后面补充。

1.指定母版与加载机制

首先我们来看_ViewStart.chhtml页面,它的内容很简单:

 
 
 
 
  1. @{  
  2.     Layout = "~/Views/Shared/_Layout.cshtml";  

这句代码指定了默认的母版的位置: 当前应用程序根目录下<"~"的含义>的Views/Shared/_Layout.cshtml

除非特殊情况,比如视图是Partial视图,或显示的在视图中添加以下代码指示不使用母版:

 
 
 
 
  1. @{  
  2.     Layout = null;  

其他情况下,该指定页就是视图的母版页。

然后我们来看看Razor母版页_Layout.cshtml的内容:

 
 
 
 
  1.  
  2.  
  3.  
  4.  
  5.  
  6.     @ViewBag.Title 
  7.      
  8.      
  9.  
  10.  
  11.  
  12.      
  13.          
  14.              
  15.                 

    我的 MVC 应用程序

     
  16.             
 
  •              
  •                 欢迎 @User.Identity.Name!  
  •             
  •  
  •              
  •                  
  •                     
  • @Html.ActionLink("主页", "Index", "Home")
  •  
  •                     
  • @Html.ActionLink("关于", "About", "Home")
  •  
  •                  
  •             
  •  
  •          
  •          
  •             @RenderBody() 
  •          
  •          
  •          
  •      
  •  
  •  
  • 注意@RenderBody()这个方法相当于一个占位符,假如我们的首页视图Index.cshtml是这样,

     
     
     
     
    1. @{  
    2.     ViewBag.Title = "主页";  
    3. }  
    4.  
    5. @ViewBag.Message

       
    6.  

    7.     若要了解有关 ASP.NET MVC 的更多信息,请访问 http://asp.net/mvc。  
    8.  

    一般的视图处理,比如当服务器响应一个HomeController.Index()请求的时候,需要返回Index视图,

    首先会加载母版页_Layout.cshtml的内容,遇到@RenderBody()时,就用首页视图的内容置换到这里,最后处理完成返回静态页面。

    2.使用Partial视图

    MVC 2.0中,你需要使用标签来进行页面分割,太多的话自己都忘记了哪个对应的是哪个部份。

    在Razor中,可以将需要剥离出来的部份作为一个单独的Partial视图,比如网站的头部(Logo,导航等等..),底部(友情链接,版权声明等等..),或是某个功能模块(登陆框等等..)。

    比如上面的母版页,我们可以把它的头部和底部剥离出来,在Share文件夹下右键添加/视图,选择创建为分部视图,如图3:

        图3

    依照上述步骤创建”_HeaderPartial.cshtml“和"_FooterPartial.cshtml"两个视图

     
     
     
     
    1.  
    2.              
    3.                 

      我的 MVC 应用程序

       
    4.              
    5.              
    6.                 欢迎 @User.Identity.Name!  
    7.              
    8.              
    9.                  
    10.                     
    11. @Html.ActionLink("主页", "Index", "Home")
    12.  
    13.                     
    14. @Html.ActionLink("关于", "About", "Home")
    15.  
    16.                  
    17.              
    18.          
     
     
     
     
    1.  
    2. © 2008-2012 John Connor All rights reserved.  
    3.  

    可以看出,提取Partial视图很简单,就是把需要的内容提取出来,放在新建的Partial视图中。然后,我们还需要干一件事情,

    类似于一般视图,Partial视图使用自己特有的占位符来替换原内容。我们这么干之后,原_Layout.cshtml页就变成了这样:

     
     
     
     
    1.  
    2.  
    3.  
    4.  
    5.  
    6.     @ViewBag.Title 
    7.      
    8.      
    9.  
    10.  
    11.  
    12.      
    13.         @Html.Partial("_HeaderPartial") 
    14.          
    15.             @RenderBody()   
    16.          
    17.          @Html.Partial("_FooterPartial") 
    18.      
    19.  
    20.  

    这样,页面的布局是不是更清爽简洁了?如同一般视图,返回请求时会先加载母版页然后遇到占位符时加载相应的Partial视图,最后返回处理完成的静态页面。

    三,Razor语法简介与应用

    1.语法简介

    如果我们希望在HTML代码中绑定数据,比如说我们有一个产品的对象Product,需要绑定产品的名称Product.Name,只需要在变量前面加"@"即可,

    也可以使用"@(expression)"绑定一个表达式:

     
     
     
     
    1. @Product.Name

       
    2. @(Product.Price*0.8)

       

    Razor中使用”@{code}“来标识一段C#代码,代码段可以出现在任何位置,并且支持与HTML混写:

     
     
     
     
    1. @{  
    2.     var product=new product();  
    3.     product.Name="pen";  
    4.     product.Price=1.00;    

      @product.Name

          

      @product.Price

      } 

    使用循环或条件语句时直接加"@"前缀,可以控制页面逻辑:

     
     
     
     
    1. @foreach(var product in products)  
    2. {  
    3.     

      @item.Name

       
    4. } 

    Razor中注释是"@**@",即可以注释Html代码,也可以注释C#代码,在代码块中仍可使用C#的注释方式:

     
     
     
     
    1. @{  
    2.     var product=new product();  
    3.     product.Name="pen";  
    4.     //product.Price=1.00;  
    5.     

      @product.Name

       
    6.     @*

      @product.Price

      *@  
    7.  } 

    2.ASP.NET MVC3.0 Web中的应用

    假设我们有一个Product类位于JohnConnor.Data命名空间下,有Name和Price两个属性,HomeController.Index()方法返回一个List对象给Index视图,打印所有产品名称,并且点击产品名称时,弹出产品价格。

    HomeController.Index()方法如下:

     
     
     
     
    1. using System;  
    2. using System.Collections.Generic;  
    3. using System.Linq;  
    4. using System.Web;  
    5. using System.Web.Mvc;  
    6. using JohnConnor.Data;  
    7.  
    8. namespace JohnConnor.Web.Controllers  
    9. {  
    10.     public class HomeController : Controller  
    11.     {  
    12.         public ActionResult Index()  
    13.         {  
    14.             var products = new List()  
    15.             {  
    16.                 new Product{ Name="钢笔", Price=11.55M},  
    17.                 new Product{ Name="铅笔", Price=2.17M},  
    18.                 new Product{ Name="圆珠笔", Price=5.98M},  
    19.             };  
    20.             return View(products);  
    21.         }  
    22.     }  

    我们来改一下Index视图演示一下Razor的简单应用。

     
     
     
     
    1. @using JohnConnor.Data;  
    2. @model List 
    3. @{  
    4.     ViewBag.Title = "主页";//母版中ViewBag.Title用于绑定Title标签,这里进行赋值。  
    5. }  
    6. Razor

       
    7. @foreach (var product in Model)  
    8. {  
    9.     //遍历所有的产品  
    10.      

    在一般视图中,首先声明视图模型,即Action返回的ViewResult对象的类型<也可以不声明,如果有返回对象建议声明>。

    这里的视图模型是一个List集合,因为Product位于using JohnConnor.Data命名空间,所以先添加了引用。

    在母版中ViewBag.Title用于绑定Title标签,在一般视图中就可以进行赋值来绑定页面的Title 。

    如果你不想使用母版,就在代码块中添加"Layout = null;"。

    最后是就是一些数据绑定,或者是逻辑的处理。

    Razor的基本内容大概就讲这些了,当然它还有很丰富的底蕴,需要在实际的运用过程中去学习,一篇短文是无法涵盖所有信息的。

    最后提一点,Razor暂时没有设计视图,这是比较悲摧的一点。相信之后会有的。如果对Razor的使用有任何问题,可以在此提出,能力范围内的问题我都可以提供帮助。

    原文地址:http://www.cnblogs.com/John-Connor/archive/2012/05/08/2487200.html

    【编辑推荐】

    新闻标题:ASP.NET视图引擎攻略
    URL链接:http://www.gawzjz.com/qtweb/news21/205321.html

    网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

    广告

    声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

    猜你还喜欢下面的内容

    外贸建站知识

    同城分类信息