ASP.NET MVC3 Razor 初心者容易遇到的問題
- 2011-06-12
- 61376
- 0
- 版本
- 3
在 ASP.NET MVC 3 中增加了一種新的 視圖引擎( View Engine )優點相當的多因此 demo 相信如果要寫 ASP.NET MVC 3 的朋友絕大多數都會選擇使用 Razor 但因為寫法改變,剛開始可能是會十分不習慣,甚至一些很簡單的東西還要 Try 很多次才會成功,因此 demo 特別整理了一下,我寫 demo小鋪時有停頓的地方,期望有需要的網友可以更快的接觸 Razor 這相當優良的 視圖引擎( View Engine )
- 2011-06-13:增加電子郵件與@() 的用法說明
基本寫法介紹
為了讓文章更清楚這裡先假設以下輸出值
Model.Content="<a href='http://demo.tc' >demo小鋪</a>" item.Key="<span>IsKey</span>" item.Value="<span>IsValue</span>"
Razor | Aspx |
---|---|
程式碼區塊:無輸出 | |
@{ int a = 123; string b = "demoshop"; } |
<% int a = 123; string b = "demoshop"; %> |
HTML Encoded:<a href='http://demo.tc' >demo小鋪</a> | |
<div> @Model.Content </div> |
<div> <%:Model.Content %> </div> |
HTML Unencoded:demo小鋪 | |
<div> @Html.Raw(Model.Content) </div> |
<div> <%=Model.Content %> </div> |
混合程式碼:<span>IsKey</span> | |
@foreach (var item in collection) { <span>@item.Key</span> } |
<%foreach (var item in collection) {%> <span><%:item.Key %></span> <%} %> |
混合程式碼:我是純文字 <span>IsValue</span> | |
@foreach (var item in collection) { <text>我是純文字</text> @item.Value } |
<%foreach (var item in collection) {%> 我是純文字 <%:item.Key %> <%} %> |
混合程式碼:我是純文字 <span>IsValue</span> | |
@foreach (var item in collection) { @:我是純文字 @item.Value } |
<%foreach (var item in collection) {%> 我是純文字 <%:item.Key %> <%} %> |
混合程式碼:目前是第 0. 目前是第 1. 目前是第 2. | |
@for (int i = 0; i < 3; i++) { @:目前是第 @i. } |
<%for (int i = 0; i < 3; i++) {%> 目前是第<%=i %>. <%} %> |
三元運算子:<a href='http://demo.tc' >demo小鋪</a> | |
@(Model.Content == "" ? "沒貨" : Model.Content) |
<%:Model.Content==""?"沒貨": Model.Content%> |
註解:無輸出 | |
@*你看不到我*@ |
<%--你看不到我--%> |
以上部分表格參考C# Razor Syntax Quick Reference。
神奇的 [at] 符號
@念法是 [at] ,台灣俗稱小老鼠,在 Razor 中它有舉足輕重的用處,因為同時列在上表 demo 覺得有點亂因此在給它一個區塊來放它,Razor 很有趣!基本上它會判斷空白字元與斷行符號
比如說我需要輸出 item.Key和item.Value 的值可以有以下的寫法
@item.Key@item.Value @(item.Key + item.Value)
如果你需要 Unencoded
@:item.Key @item.Value
如果要輸出 I @ Taiwan
I @@ Taiwan
email 的輸出根本不需要有任何調整
test@test.com
前文有提到 Razor 會判斷空白字元和斷行符號,也因為 Email 的 @ 前後都有字所以會很聰明的認定它為字串,並不會當變數看,再來看下面一個範例會更清楚
依據上面的範例今天我們要輸出 demo歡迎登入的字樣,網友們可能會這樣寫
@User.Identity.Name 歡迎登入 //變數和文字中利用一個半型空白來斷開
但這有可能是我們不想要的效果,那就可以利用 @() 包住變數將它改寫為
@(User.Identity.Name)歡迎登入
就會是黏在一起的文字了
同場加映HTML5 支援
在 HTML5 中有一個很不錯的資料記錄標籤 data-xxx ,因為使用他不需要自行定義標籤因此 demo 還滿喜歡的而且利用 jQuery 就可以相當簡單的把 這標籤的值取出( 官方 API )但是如果你想在 ASP.NET MVC3 中使用需要調整一下寫法
@Html.TextBoxFor(model => model.Key, new {data_test="500" })
必須要使用底線,編譯的時候會自動轉換
回應討論