Model要重,Controller要輕,View要夠笨,mvc不希望在開發view時還需要判斷過多的與view無關的技術,所以要盡可能的保持view邏輯簡單。(以下中有出現代碼的地方用了什么尖括號百分號標簽這些字樣是為了防止保存時被新浪博客給處理掉)
如果view選擇aspx后綴的話
頁面上都會出現很多夾雜后台代碼與html的情況,而先前使用的“<尖括號%百分號%尖括號>”這種古老表示法會讓html標簽與.net代碼區塊混雜在一起,這樣當頁面變的復雜時,混合類代碼的可讀性就大大降低。
在mvc3之后view就引入了Razor語法,用俗稱的小老鼠“@”符號來代表代碼片段,搭配vs的語法高亮顯示,razor語法也讓整個view頁面內的html標簽與服務器代碼結合的相當漂亮。
在mvc2.5當中如果要在頁面上顯示當前時間:
<尖括號%: DateTime.Now%百分號>
若使用razor語法,則是
@DateTime.Now
Razor並不是一個代碼語言,只是一種用在view頁面的代碼區塊撰寫風格。
如果是c#來編寫razor頁面,后綴是cshtml
如果是vb.net來編寫,后綴則是vbhtml
1,Razor基本語法
在頁面上輸出單一變量時,只要在c#語句前加上@符號
eg :
<標簽>
現在時間:@DateTime.Now
</標簽>
注意:在輸出單一變量時不需要加上分號結尾,但是如果再頁面中輸出一段空白子元或者運算子的結果時,則需要在前后加上一個小括號
eg:
<標簽>
會員名稱:@(user.Identity.Name+Model.MemberLevel)
狀態:@(ViewBag.IsEnabled?"啟用":“停用”)
</標簽>
在頁面上執行多行代碼時,必須在前后加上一個大括號
eg
@
{
var a=1;
var b="aaa";
}
注意:@{}之間屬於一個c#代碼區段,在撰寫代碼時必須符合c#語言規范,也就是必須分號結尾。
如果要在多行后台代碼的razor語法中插入html或者其他內容,必須在每一行最前面加上一個"@:"符號,在這個符號的這行代碼里,也可以再加上其他razor變量
eg:
@
{
var name="aa";
@:您好, 我是@name
}
razar檢視頁面中表示注釋,用“@*”與“*@”來當注釋頭尾,就不寫范例了。
如果要在razor頁面輸出“@”符號,可以用@符號作為跳脫子元,比如@@aaa,輸出@aaa
2,razor與html混合輸出
if語句范例
@if(ViewBag.IsEnabled){
@:啟用
}else{
@:停用
}
如果再if與else代碼區塊里放置大量的html標簽,每行前面都要加"@:"有點麻煩,只要在代碼區塊的前后加上一組html標簽就可以,(純文字在razor的代碼里會自動被視為c#語句,所以必須加標簽)
@if(ViewBag.IsEnabled){
<標簽>啟用</標簽>
}else{
<標簽>停用</標簽>
}
vs工具中的高亮提示,razor中c#代碼是顯示淡藍色,如果是白底色的話就代表是razor意外的純文字,razor會很智能的自動辨別是c#還是html,但是如果我們不想在這個區段出現任何的標簽怎么辦呢,在razor中使用特殊的<標簽text>來代替這個html標簽,最后輸出到瀏覽器時就不會出現text標簽,當然也可以在多行c#代碼區段使用"@:" 或者text作為HTML與razor語法之間的切換