Asp.net MVC 3 之 Razor 視圖引擎__.net

來源:互聯網
上載者:User

    Asp.net MVC 3 中引入了一個新的View Engine: Razor。使用Razor不需要學習新的語言,也更容易將動態代碼與HTML結合,拋卻了<%%>這樣的標記,使用一個神奇的@號,就能搞定一切,就像JQuery中的$號一般神奇,而且能夠給我們留下更乾淨的HTML代碼。相比Aspx,在VS2010中,Razor更加智能,現在寫一個對Model的型別宣告終於可以靠文法提示完成了。

    在View的第一行鍵入  @model WebApplication1.Models.   這裡就會有智能提示搞定了。

    Razor引擎的視圖為cshtml格式,下面對比下兩種指令碼引擎的文法,以下,都參考Scott的部落格上的介紹。首先,國際慣例,先來個Hello World。 Hello world

實現如圖的頁面:

使用 .ASPX,我們需要寫 <%= %>的文法來輸出一個變數,像下面這樣寫:

輸出一個變數,需要五個字元 <%= %>,而且%這個字元需要按Shift+5,是一個不容易輸入的字元。如果我們使用Razor,像下面一樣:

Razor解析器能讀懂C#/VB的文法,並能提供智能感知,所以上面的代碼,就不需要明確的指定代碼塊。Razor能夠識別上述語句,將他們作為自包含的代碼塊。上面的代碼中,我們輸出一個變數只需要1個@字元,比aspx中節省了4個。而且@號比其%號,容易敲多了,這樣在輸入代碼的時候,鍵盤敲擊會更流暢。 迴圈與Html嵌套

讓我們看一下另一個簡單應用情境,需要列出一些產品名稱極其價格:

使用.aspx

使用ASP.net的文法,我們需要將這個代碼多處用 <%%> 來聲明。

使用Razor:

看看是不是簡單多了。因為Razor能識別C#/VB的語義,所以會自動的將foreach的第一行與最後一行作為代碼塊處理。而且能夠自動提供對象 p 的文法提示。這樣使得編碼更為簡介,能大幅度提高編碼過程的效率。 If 語句和多行語句(Razor Only)

If 語句,

多行語句:

你可以聲明多行代碼使用 @{ Code }

也可以 直接使用像下面這樣 @()

整合內容與代碼

看到@符號,自然會聯絡到EMail,如果我們嵌入的代碼中,有一個EMail地址,會被怎麼處理呢。Razor會分析@右邊的內容,是否為Razor的內建對象或者變數等,所以EMail地址不會被誤解析:

你想要輸出一個@號,那麼,輸入 @@ 就可以了。

識別嵌入的內容

當將Html內容嵌入到if-else, for , foreach, 或者其他的塊語句,你需要將內容包含在HTML或者XML標記中,以便Razor能夠更好的識別這些內容。

例如,下面的代碼將多行的內容包含在中:

將輸出:

如果你不想要使用一個HTML標記來包圍這些內容,你可以使用一個標記,如下所示

將輸出

HTML編碼

預設的,所有的使用@輸出的內容都會被自動進行HTML編碼,以更好的放置XSS 攻擊。如果一定要輸出HTML代碼,例如富文字編輯器邊際的HTML代碼,需要使用如下的方法:

@(new MVCHtmlString(article.Body))

這樣將不會進行HTML編碼。 Layout/MasterPage - 基礎

從ASP.net 2.0開始,就提供了MasterPage主版頁面的功能,可以是網站中的頁面能夠使用一致的外觀。Razor也能夠支援這種概念,在Razor中,使用Layout Pages來提供這一功能。能夠允許你定義一個通用的網站摸吧,然後在你所有的視圖中繼承這一外觀。

簡單的Layout樣本

下面是一個簡單的Layout樣本,它可以包含所有的靜態HTML內容,也可以包含動態伺服器端代碼。我們可以在需要插入指定主題內容的位置,調用@RenderBody() Helper方法。

然後我們可以建立一個Home.cshtml的視圖,該視圖使用這個Layout頁,只需要在頭部加入LayoutPage="siteLayout.cshtml"【這個貌似是beta版,正式版為Layout="…………"】

Layout/MasterPage 情境 - 添加Section

在Razor中,可以在Layout 中Render多個 Section,在View中然後選擇性的填充這些Section。這樣可以給網站的頁面配置提供極大的靈活性。

例如,Layout頁的左側,可以加入一個菜單的顯示,那麼可以在Layout頁中寫入一個

@RenderSection("menu", required:false)

在需要菜單的頁面中,我們定義這個Section    

@setion menu{
sub-menu"> Menu item 1 Menu Item 2 }

如果不需要菜單,那就不要定義這個Section,就不會有菜單。 封裝-重用 Html 助手

在Asp.net MVC中,使用了很多Helper函數,最常用的就是 Html Helpers。

基於代碼的Html Helpers

ASP.net MVC使用了 Html Helpers的概念,這些Helpers是一些可以在代碼塊中調用的方法,他們用來產生HTML代碼。這些方式一般都寫成了擴充方法,使用純程式碼編寫。在Asp.net MVC中所有的HTML擴充方法,都可以在Razor中工作,不需要改變任何代碼:

聲明Html Helpers

使用純程式碼的方法來產生HTML是沒問題,但是不夠理想。在Razor中,有一種更容易的方法來產生一個可重用的Html助手。使用@helper{}聲明即可:

然後,我們可以在視圖中調用這個Pager

Visual Studio對Razor提供了良好的支援,完全支援智能感知

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.