自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

ASP.NET 視圖引擎攻略

開發(fā) 后端
即使是寫代碼的本人,閉合也是一件麻煩的事情,并且VS對”<% %>“的自動縮進和對齊支持不很友好,看慣了整齊的代碼,面對自己寫出的凌亂的東西會很不爽。

引子

看下面一段MVC 2.0的代碼。

  1. <%if (Model != null)  
  2. {%> 
  3.  <p><%=Model%></p> 
  4. <%}%> 
  5. <%else  
  6. {%> 
  7.  //Do something  
  8. <%}%> 

我們站在一個讀者的立場上來看,”<% %>“這種標記C#代碼的方法是十分蛋疼的。

如果寫這段代碼的人沒有良好的縮進和對齊習慣的話,一段邏輯較為復雜的代碼就會堆砌著雜亂無章的"<%"%>"--匹配它們就是一件頭疼的事情,會讓讀者望而生畏。

即使是寫代碼的本人,閉合也是一件麻煩的事情,并且VS對”<% %>“的自動縮進和對齊支持不很友好,看慣了整齊的代碼,面對自己寫出的凌亂的東西會很不爽。

隨著MVC 3.0的發(fā)布,新的Razor視圖引擎解決了這個問題。

Razor的意思的就是 剃刀,可見它灰常犀利。引言中的代碼,我們用Razor的語法來寫的話:

  1. @if (Model != null)    
  2. {  
  3.   <p>@Model</p> 
  4. }  
  5. else  
  6. {  
  7.     //Do something   

Razor使用了"@"來標記一段C#代碼,并幫我們進行了內部的閉合,是不是感覺清爽多了?

Razor在減少代碼冗余、增強代碼可讀性和vs 智能感知方面,都有著很大的優(yōu)勢。下面我們來具體的介紹如何在ASP.NET MVC 3.0中使用Razor。

一,創(chuàng)建基于Razor的Web程序

首先你的開發(fā)環(huán)境必須安裝.NET Framework4.0,然后在VS中新建項目時選擇ASP.NET MVC 3 應用程序,在選項頁面中選擇視圖引擎為Razor,如圖1:

  圖1

然后創(chuàng)建項目,就會得到一個基于Razor的Web項目了,如圖2。  

   圖2

相信熟悉MVC的看官們對此結構并不陌生。注意紅框部份,Razor的頁面是以cshtml為后綴的,下面我們來講下如何使用Razor來進行頁面布局。

二,使用Razor來進行頁面布局

UI設計師們現(xiàn)在也講究頁面設計的語義化和結構化,把一個頁面分成很多個模塊,使用語義化的類名或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. <!DOCTYPE html> 
  2. <html> 
  3. <head> 
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> 
  5.  
  6.     <title>@ViewBag.Title</title> 
  7.     <link href="@Url.Content("~/Content/Site.css")" rel="stylesheet" type="text/css" /> 
  8.     <script src="@Url.Content("~/Scripts/jquery-1.5.1.min.js")" type="text/javascript"></script> 
  9. </head> 
  10. <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> 
  11. <body> 
  12.     <div class="page"> 
  13.         <div id="header"> 
  14.             <div id="title"> 
  15.                 <h1>我的 MVC 應用程序</h1> 
  16.             </div> 
  17.             <div id="logindisplay"> 
  18.                 歡迎 <strong>@User.Identity.Name</strong>!  
  19.             </div> 
  20.             <div id="menucontainer"> 
  21.                 <ul id="menu"> 
  22.                     <li>@Html.ActionLink("主頁", "Index", "Home")</li> 
  23.                     <li>@Html.ActionLink("關于", "About", "Home")</li> 
  24.                 </ul> 
  25.             </div> 
  26.         </div> 
  27.         <div id="main"> 
  28.             @RenderBody()<!--一般視圖內容的占位符--> 
  29.         </div> 
  30.         <div id="footer"> 
  31.         </div> 
  32.     </div> 
  33. </body> 
  34. </html> 

注意@RenderBody()這個方法相當于一個占位符,假如我們的首頁視圖Index.cshtml是這樣,

  1. @{  
  2.     ViewBag.Title = "主頁";  
  3. }  
  4.  
  5. <h2>@ViewBag.Message</h2> 
  6. <p> 
  7.     若要了解有關 ASP.NET MVC 的更多信息,請訪問 <a href="http://asp.net/mvc" title="ASP.NET MVC 網站">http://asp.net/mvc</a>。  
  8. </p> 

一般的視圖處理,比如當服務器響應一個HomeController.Index()請求的時候,需要返回Index視圖,

首先會加載母版頁_Layout.cshtml的內容,遇到@RenderBody()時,就用首頁視圖的內容置換到這里,最后處理完成返回靜態(tài)頁面。

2.使用Partial視圖

MVC 2.0中,你需要使用<asp:Content></asp:Content>標簽來進行頁面分割,太多的話自己都忘記了哪個對應的是哪個部份。

在Razor中,可以將需要剝離出來的部份作為一個單獨的Partial視圖,比如網站的頭部(Logo,導航等等..),底部(友情鏈接,版權聲明等等..),或是某個功能模塊(登陸框等等..)。

比如上面的母版頁,我們可以把它的頭部和底部剝離出來,在Share文件夾下右鍵添加/視圖,選擇創(chuàng)建為分部視圖,如圖3:

    圖3

依照上述步驟創(chuàng)建”_HeaderPartial.cshtml“和"_FooterPartial.cshtml"兩個視圖

  1. <!--_HeaderPartial.cshtml--><div id="header"> 
  2.             <div id="title"> 
  3.                 <h1>我的 MVC 應用程序</h1> 
  4.             </div> 
  5.             <div id="logindisplay"> 
  6.                 歡迎 <strong>@User.Identity.Name</strong>!  
  7.             </div> 
  8.             <div id="menucontainer"> 
  9.                 <ul id="menu"> 
  10.                     <li>@Html.ActionLink("主頁", "Index", "Home")</li> 
  11.                     <li>@Html.ActionLink("關于", "About", "Home")</li> 
  12.                 </ul> 
  13.             </div> 
  14.         </div> 
  1. <!--_FooterPartial.cshtml--><div id="footer"> 
  2. © 2008-2012 John Connor All rights reserved.  
  3. </div> 

可以看出,提取Partial視圖很簡單,就是把需要的內容提取出來,放在新建的Partial視圖中。然后,我們還需要干一件事情,

類似于一般視圖,Partial視圖使用自己特有的占位符來替換原內容。我們這么干之后,原_Layout.cshtml頁就變成了這樣:

  1. <!DOCTYPE html> 
  2. <html> 
  3. <head> 
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> 
  5.  
  6.     <title>@ViewBag.Title</title> 
  7.     <link href="@Url.Content("~/Content/Site.css")" rel="stylesheet" type="text/css" /> 
  8.     <script src="@Url.Content("~/Scripts/jquery-1.5.1.min.js")" type="text/javascript"></script> 
  9. </head> 
  10. <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> 
  11. <body> 
  12.     <div class="page"> 
  13.         @Html.Partial("_HeaderPartial")<!--_HeaderPartial視圖占位符--> 
  14.         <div id="main"> 
  15.             @RenderBody()   
  16.         </div> 
  17.          @Html.Partial("_FooterPartial")<!--_FooterPartial視圖占位符--> 
  18.     </div> 
  19. </body> 
  20. </html> 

這樣,頁面的布局是不是更清爽簡潔了?如同一般視圖,返回請求時會先加載母版頁然后遇到占位符時加載相應的Partial視圖,最后返回處理完成的靜態(tài)頁面。

三,Razor語法簡介與應用

1.語法簡介

如果我們希望在HTML代碼中綁定數(shù)據,比如說我們有一個產品的對象Product,需要綁定產品的名稱Product.Name,只需要在變量前面加"@"即可,

也可以使用"@(expression)"綁定一個表達式:

  1. <p>@Product.Name</p> 
  2. <p>@(Product.Price*0.8)</p> 

Razor中使用”@{code}“來標識一段C#代碼,代碼段可以出現(xiàn)在任何位置,并且支持與HTML混寫:

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

使用循環(huán)或條件語句時直接加"@"前綴,可以控制頁面邏輯:

  1. @foreach(var product in products)  
  2. {  
  3.     <p>@item.Name</p> 
  4. } 

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

  1. @{  
  2.     var product=new product();  
  3.     product.Name="pen";  
  4.     //product.Price=1.00;  
  5.     <p>@product.Name</p> 
  6.     @*<p>@product.Price</p>*@  
  7.  } 

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

假設我們有一個Product類位于JohnConnor.Data命名空間下,有NamePrice兩個屬性,HomeController.Index()方法返回一個List<Product>對象給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<Product>()  
  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<Product> 
  3. @{  
  4.     ViewBag.Title = "主頁";//母版中ViewBag.Title用于綁定Title標簽,這里進行賦值。  
  5. }  
  6. <h2>Razor</h2> 
  7. @foreach (var product in Model)  
  8. {  
  9.     //遍歷所有的產品  
  10.     <input type="button" name="@product.Name"   value="@product.Name" onclick="alert(@product.Price)" /> 

在一般視圖中,首先聲明視圖模型,即Action返回的ViewResult對象的類型<也可以不聲明,如果有返回對象建議聲明>。

這里的視圖模型是一個List<Product>集合,因為Product位于using JohnConnor.Data命名空間,所以先添加了引用。

母版中ViewBag.Title用于綁定Title標簽,在一般視圖中就可以進行賦值來綁定頁面的Title 。

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

最后是就是一些數(shù)據綁定,或者是邏輯的處理。

Razor的基本內容大概就講這些了,當然它還有很豐富的底蘊,需要在實際的運用過程中去學習,一篇短文是無法涵蓋所有信息的。

最后提一點,Razor暫時沒有設計視圖,這是比較悲摧的一點。相信之后會有的。如果對Razor的使用有任何問題,可以在此提出,能力范圍內的問題我都可以提供幫助。

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

【編輯推薦】

責任編輯:張偉 來源: 菊花臺泡茶的博客
相關推薦

2012-06-26 10:24:51

Asp.Net框架Razor

2009-07-21 15:11:14

ASP.NET Rou

2021-06-22 16:59:56

微軟.NETC# 軟件開發(fā)

2014-07-29 10:00:30

ASP.NETMVCAutoFac

2009-08-07 15:32:28

ASP.NET復合控件

2009-08-10 14:25:33

ASP.NET服務器控

2009-08-03 14:22:33

什么是ASP.NET

2009-07-28 17:17:19

ASP.NET概述

2009-07-22 17:45:35

ASP.NET教程

2009-10-09 10:52:43

ASP.NET模板引擎

2009-07-27 12:22:03

ASP.NET和ASPASP.NET入門教程

2009-08-04 15:13:38

2009-08-10 13:32:15

ASP.NET TimASP.NET組件設計

2009-07-29 17:11:25

ASP.NET ISA

2009-07-29 16:08:07

ASP和ASP.NET

2009-08-03 17:35:07

ASP.NET WebASP.NET編程工具

2009-07-28 09:02:32

asp.net aja

2011-07-12 15:03:28

2009-08-03 13:38:18

ASP.NET編程模型

2011-01-19 11:17:36

點贊
收藏

51CTO技術棧公眾號