首先說下MVC,mvc已經不用ViewState來保留網頁的狀態,所以大部分依賴ViewState的功能都將無法使用, 比如gridview的分頁與排序,page trace等利用viewstate記錄狀態的功能將全部失效,另外的大改變就是 asp.net mvc已經沒有頁面生命周期也沒有事件驅動.
Razor語法是在MVC3.0引入的全新的c#語法,取而代之<%...%>語法.用在mvc的view頁面.
首先談一下razor語法的基本用法:
1.如果在頁面輸出單一變量時,只要在c#語句之前加上@符號即可,范例如下:
<p>
現在時刻:@DateTime.Now
</p>
2、在頁面中輸出一段含有空白子元或運算子的結果時,必須在前后加上一個小括弧,范例如下:
<p>
會員名稱:@(User.Identity.Name+Model.MemberLevel)
啟用狀態:@(View.IsEnabled?"啟用":"停用")
</p>
3、在頁面中執行多行c#代碼時,必須在前后加上一個大括弧,語法范例如下:
@{
var name="Daniel";
var message="你好"+name;
}
}
注意上述屬於一個c#代碼片段,在撰寫代碼時必須符合c#語言規范,也就是每段句都要由分號結尾.
4、如果要在多行c#代碼的Razor語法中插入html或其他文字內容,必須在每一行最前面加上"@:"符號,而且加上"@:"符號的這行代碼里,也可以加上其他Razor變量,如下范例:
@
{
var name="Daniel";
@:你好",我是 @name
}
當然也可以用如下加上一堆html標簽,Razor語法會自動識別
@
{
var name="Daniel";
<span>你好,我是</span> @name
}
或者使用Razor語法中的<text>標簽
@
{
var name="Daniel";
<text>你好,我是</text> @name
}
5、如果要在Razor頁面中輸出“@”符號,可以在“@”符號前再加一@,如下:
@@Daniel,輸出為@Daniel
6、屬性名稱誤判
當你想輸出以下內容時 --
你好,@ViewBag.Name先生。
會造成Razor把Name先生當做viewBag的屬性了,解決辦法有幾種
- 你好,@(ViewBag.Name)先生;
- 你好,@ViewBag.Name<span>先生</span>
- 你好,<span>@ViewBag.Name</span>先生
7、輸出一段可以解析的html
當我們定義如下
@{
ViewBag.Description="<span style='font-weight:bold;'>描述文字</span>";
}
@ViewBag.Description
結果為<span style='font-weight:bold;'>描述文字</span>,如果想輸出html解析后的描述文字,那么可以使用 html輔助方法Html.Raw(ViewBag.Description)
如果我們要將以下中的“System.web.MVc”變成一個Razor變量,
類別是 System.Web.Mvc.Controller
也許你可能會寫成以下語法,但是輸出結果不是期望的;輸出結果為“類別是@ViewBag.MvcNamespace.Controller”
@{
ViewBag.MvcNamespace = "System.Web.Mvc";
}
類別是@ViewBag.MvcNamespace.Controller
為了達到輸出結果可以改成以下方式類別是@(ViewBag.MvcNamespace).Controller,輸出結果為“類別是System.Web.Mvc.Controller”