Razor語法

摘要: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在這裡面設定