ASP.NET MVC學(xué)習(xí)教程之Razor語(yǔ)法
前言
ASP.NET MVC 3配有一個(gè)新的名為“Razor”的視圖引擎選項(xiàng)(除了已有的.aspx視圖引擎)。Razor盡量減少編寫一個(gè)視圖模板需要敲入的字符數(shù),實(shí)現(xiàn)快速流暢的編程工作流。與大部分模板的語(yǔ)法不同,你不必在HTML中為了明確地標(biāo)記出服務(wù)模塊的開始和結(jié)束而中斷編程。Razor解析器足夠聰明,能從你的代碼中推斷出來(lái)。這使其簡(jiǎn)潔,富有表現(xiàn)力的語(yǔ)法輸入干凈,快速,有趣。下面話不多說了,來(lái)一起看看詳細(xì)的介紹吧
1. 表達(dá)式
表達(dá)式必須跟在“@”符號(hào)之后,
2.代碼塊
代碼塊必須位于“@{}”中,并且每行代碼必須以“;”結(jié)尾。代碼塊中定義的變量可能會(huì)被同一個(gè)域中的其他塊使用。比如,定義在視圖頂部的變量可以被同一視圖中的代碼塊和代碼段訪問。
3. 布局
Razor通過layouts保持網(wǎng)頁(yè)外觀布局的一致性。布局模板包含基本的標(biāo)簽,并可以指定渲染視圖內(nèi)容的位置。比如
基本布局文件(_Layout.cshtml)
<!DOCTYPE Html> <html lang=”en”> <head> <mete charset=”utf-8”/> <title>@View.Title</title> </head> <body> <div class=”header”> @RenderSection(“Header”); </div> @RenderBody() <div class=”footer”> @RenderSection(“Footer”); </div> </body> </html>
布局頁(yè)面定義完成后,其他視圖頁(yè)面就可以引用該布局文件,比如
@{Layout=”~/_Layout.cshtml”;}
@section Header {
<h1>Page Header Content</h1>
}
@section Footer {
Copyright @DateTime.Now.Year
}
<div class=”main”>
Page Main Content
</div>
使用Razor布局和內(nèi)容視圖將頁(yè)面組合在一起,展示了一個(gè)完整的頁(yè)面,其中的每一塊定義了頁(yè)面的不同部分。
4.部分視圖
使用布局通過重用部分HTML代碼做到網(wǎng)站外觀的一致性,但是有一些情況,布局則無(wú)法實(shí)現(xiàn),比如,網(wǎng)頁(yè)上的一部分信息需要多次重復(fù)出現(xiàn)(格式一致,顯示內(nèi)容不一致),例如,購(gòu)物網(wǎng)站頁(yè)面上的交易列表,只顯示交易名稱、當(dāng)前價(jià)格和摘要信息。
ASP.NET MVC通過部分視圖的技術(shù)實(shí)現(xiàn)了這個(gè)需求。
首先,先定義部分視圖,并保存為單獨(dú)的視圖文件(例如,~/Views/Shared/Acution.cshtml)。
@model Auction <div class=”auction”> <a href=”@Model.Url”><img src=”@Model.ImageUrl”</a> <h4><a href=”@Model.Url”>@Model.Title</a></h4> <p>Current Price :@Model.CurrentPrice</p> </div>
然后,在需要使用該部分視圖的位置,調(diào)用ASP.NET MVC自帶的HTML方法調(diào)用它,比如:
@model IEnumerable<Auction>
<h2>Search Result</h2>
@foreach(var auction in Model){
@Html.Partial(“Auction”,auction);
}
其中,Html.Partial()方法的第一個(gè)參數(shù)“Auction”是部分視圖名稱,并需要包含擴(kuò)展名。第二個(gè)參數(shù)則是傳遞到部分視圖的數(shù)據(jù)模型。第二個(gè)參數(shù)不是必須的,如果不傳遞,系統(tǒng)會(huì)默認(rèn)將調(diào)用該部分視圖的數(shù)據(jù)模型進(jìn)行傳遞,比如,本例中的IEnumerable<Auction>。
由此可見,使用部分視圖能夠降低網(wǎng)頁(yè)中的代碼重復(fù)和編碼復(fù)雜性,增強(qiáng)可讀性。
5. 顯示數(shù)據(jù)
MVC架構(gòu)分為三層,模型、視圖和控制器。三層之間彼此分離且協(xié)同工作,其中,就需要控制器擔(dān)當(dāng)“協(xié)調(diào)”的角色,視圖將請(qǐng)求交給控制器,控制器對(duì)模型進(jìn)行操作,并將操作結(jié)果反饋給視圖,視圖對(duì)模型的數(shù)據(jù)進(jìn)行呈現(xiàn)。
控制器和視圖之間的數(shù)據(jù)傳遞方式,ASP.NET MVC 提供了以下幾種實(shí)現(xiàn)方式:
1) ViewData
ViewData實(shí)現(xiàn)方式,它的實(shí)現(xiàn)類似于Dictionary的操作,使得數(shù)據(jù)傳遞變得非常簡(jiǎn)單。
在控制器方法中使用類似于ViewData[“DataKey”]=dataValue進(jìn)行賦值,在視圖文件中,使用 var dataValue=ViewData[“DataKey”]獲取數(shù)據(jù)。
2) ViewBag
ViewBag的使用類型與C#中的dynamic類型,可以直接操作其屬性,比如,
控制器方法:ViewBag.DataProperty=dataValue;
視圖文件:var dataValue=ViewBag.DataProperty;
3) Model屬性
Model屬性屬于強(qiáng)類型,并且是動(dòng)態(tài)類型,可以在視圖上輸入”@Model”就可以直接訪問。
6. HTMLHelper和URLHelper
Web請(qǐng)求的目標(biāo)就是向用戶發(fā)送HTML代碼,在Razor語(yǔ)法中,ASP.NET MVC有兩個(gè)重要的幫助類來(lái)生成對(duì)應(yīng)的HTML代碼,分別是HTMLHelper和URLHelper。HTMLHelper類用來(lái)生成HTML標(biāo)記代碼,URLHelper用來(lái)生成URL地址鏈接。
<img src='@Url.Content(“~/Content/images/header.jps”)'/> @Html.ActionLink(“Home”,”Index”,”Home”)
渲染得到的HMTL代碼為:
<img src='/vdir/Content/images/header.jpg'/> <a href=”/vdir/Home/Index”>HomePage</a>
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
相關(guān)文章
Asp.Net平臺(tái)下的圖片在線裁剪功能的實(shí)現(xiàn)代碼(源碼打包)
最近項(xiàng)目中有個(gè)圖片在線裁剪功能,本人查找資料,方法如下:前臺(tái)展現(xiàn)用jquery.Jcrop實(shí)現(xiàn),后臺(tái)使用 System.Drawing.Image類來(lái)進(jìn)行裁剪2011-10-10
利用Aspose.Cells實(shí)現(xiàn)萬(wàn)能導(dǎo)出功能
這篇文章主要為大家詳細(xì)介紹了利用Aspose.Cells實(shí)現(xiàn)萬(wàn)能導(dǎo)出功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-12-12
ASP.NET實(shí)現(xiàn)Hadoop增刪改查的示例代碼
本篇文章主要介紹了ASP.NET實(shí)現(xiàn)Hadoop增刪改查的示例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧2017-10-10
Asp.Net的FileUpload類實(shí)現(xiàn)上傳文件實(shí)例
這篇文章主要介紹了Asp.Net的FileUpload類實(shí)現(xiàn)上傳文件的方法,以實(shí)例形式講述了上傳文件類的具體實(shí)現(xiàn)方法,是非常實(shí)用的技巧,需要的朋友可以參考下2014-11-11
讓VS2008對(duì)JQuery語(yǔ)法的智能感知更完美一點(diǎn)
上周Rich Strahl的POST中提到一個(gè)新發(fā)布的VS2008 hotfix修復(fù)了VS2008對(duì)Javascript智能感知的一些BUG,fixed之后可以讓VS2008對(duì)JQuery提供智能感知,讓我等JQuery fans欣喜了一陣子??勺屑?xì)一看,還需要另外給JQuery添加上XML comments才行 :( 喪氣了...2008-03-03
asp.net5中的用戶認(rèn)證與授權(quán)(1)
Visual Studio 2015 Preview 除了給我們帶了了C# 6.0的新語(yǔ)法、跨移動(dòng)的開發(fā)以外,還給我們帶來(lái)了ASP.NET5(也就是之前被稱作下一代ASP.NET的ASP.NET vNext)。本文給大家介紹asp.net5中的用戶認(rèn)證與授權(quán)(1),需要的朋友可以參考下2015-10-10
ASP.NET Core 2.2中的Endpoint路由詳解
這篇文章主要介紹了ASP.NET Core 2.2中的Endpoint路由詳解,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧2019-03-03

