2012-07-19 55 views
7

我在MVC視圖中擁有這段代碼,但它會像很多代碼一樣接縫來實現這個簡單的事情。任何方式使它更有效率?檢查Viewbag屬性是否爲空,並在視圖中使用默認值

@if (string.IsNullOrEmpty(ViewBag.Name)) 
{ 
@:   
} 
else 
{ 
@:ViewBag.Name 
} 
+1

我要提醒我的回答對一件事。如果ViewBag.Name是「」,那麼你得到的輸出爲「」而不是 。這是因爲??運算符僅適用於空字符串而不是空字符串。 – VJAI 2012-07-20 12:20:02

回答

17
@(ViewBag.Name ?? Html.Raw(" ")) 
5

任何方式使其更有效率?

對沒錯,使用視圖模型和擺脫ViewBag的:

public string FormattedName 
{ 
    get { return string.IsNullOrEmpty(this.Name) ? " " : this.Name; } 
} 

,然後在你的強類型的視圖:

@Html.DisplayFor(x => x.FormattedName) 

或者如果你喜歡:

@Model.FormattedName 

另一種可能性是編寫自定義幫助ER:

public static class HtmlExtensions 
{ 
    public static IHtmlString Format(this HtmlHelper html, string data) 
    { 
     if (string.IsNullOrEmpty(data)) 
     { 
      return new HtmlString(" "); 
     } 

     return html.Encode(name); 
    } 
} 

,然後在您的視圖:

@Html.Format(Model.Name) 

,或者如果你需要保持ViewCrap你將不得不忍受鑄造(對不起,.NET不支持擴展方法調度動態參數):

@Html.Format((string)ViewBag.Name) 
+1

我認爲'動態'一般被濫用。 – 2012-07-19 14:53:23

相關問題