摘要:Razor語法 (待續)
1. 輸出單一變數時
@DateTime.Now
2. 需要邏輯判斷時,請用刮號包起來
啟用狀態: @(ViewBag.IsEnabled ? "啟用" : "停用")
3. 多行程式碼
@{
var name = "Chris";
@:您好,我是@name
}
請注意這邊每行完要;
Razor的註解符號 @* // code *@
再多行註解中還可以使用變數
4. 程式碼區段中想要放入一段Html碼,可用<text> tag包住,最後此tag不會輸出到網頁上
@{
var bool = true;
if(bool){
成功!!
}
}
5. 屬性誤判 最好是變數都用括號刮起來
錯誤
您好,@ViewBag.Name先生
沒有Name先生屬性
正確
您好,@(ViewBag).Name先生
6. Email的小老鼠不用特別處理 只要@前後有文字Razor會自行忽略
7. 輸出未經HtmlEncode的字串
mvc對於變數都是預設經過編碼,因此若要顯示一些tag才要解碼
@{
ViewBag.Description = "文字描述 "
}
@Html.Raw(ViewBag.Description)
8. MasterPage
預設載入路徑在 /Views/_ViewStart.cshtml (全站預設)
_ViewStart.cshtml內容為載入的主板頁面入境
若是想要在 Views/Home/Index/ 的目錄下載入個別的MasterPage
請在 /Views/Home/ 擺入新的_ViewStart.cshtml 即可設定成新的MasterPage
(MasterPage)有兩個特殊挖洞語法
@RenderBody() : View在沒有特別宣告的情況下都會被填到這邊
@RenderSection( name , required : false)
具名坑洞 - MasterPage與View都需要宣告,
第一個參數為具名參數名稱
第二個參數為是否為必填,若宣告為TRUE 所有載入此Layout的VIEW都需要填入內容否則會出錯
View要如何對應到具名坑洞呢?
@Section 具名坑洞Name {
// CODE
}
PS: Razor執行順序為先View在Layout所以將資料傳到layout頁面可以使用Viewbag與ViewData
但是無法從Layout傳資料回view
9. @Helper輔助方法
//原來View
@foreach( var item in Model) {
@if(item.score > 60){
@:及格
} else{
@:不及格
}
}
//不希望這種邏輯一直存在很多地方可以寫@helper方法幫忙
新view
@foreach( var item in Model) {
@ShowIsPass(item.score)
}
@helper ShowIsPass(int score){
@if(score > 60){
@:及格
} else{
@:不及格
}
}
若是這個Helper方法很多View想要使用
請在將@Helper方法獨立出來放在App_Code目錄下
加入新項目 -> MVC部分頁面(Razor)
此檔案副檔名為cshtml,檔名預設為類別名稱(習慣取代配置)
@heleper 一定要小寫
View的用法
@檔名.方法名稱()
10.function自訂函式
@functions{
public string GetSomeString()
{
var name = "clris";
return name;
}
}
//View呼叫用法
@GetSomeString()
若是多個View共用跟@helper一樣請放到App_Code裡面
但是請把方法變成Static不然無法使用
放到App_code的裡面,view用法一樣
@檔名.方法名稱()
11. @using 引用命名空間
@using MvcApplication6.Models
若是每個頁面都需要引入的空間可以用 /Views/web.config中設定 (不是網站根目錄)
裡面搜尋namespace在這裡面設定