2010-05-14 42 views
5

我正在加緊ASP.NET MVC,並看我如何在視圖中輸出消息。什麼是做這種事的最好方法?助手?控制?還是一樣?ASP.NET MVC中條件輸出的最佳實踐?

<% if (ViewData.ContainsKey("message") && !string.IsNullOrEmpty(ViewData["message"].ToString())) { %> 
    <div class="notice"> 
     <%= ViewData["message"] %> 
    </div> 
<% } %> 

回答

5

我會用一個HTML幫手:

public static class HtmlExtensions 
{ 
    public static string GetMessage(this HtmlHelper htmlHelper) 
    { 
     var message = htmlHelper.ViewData["message"] as string; 
     if (string.IsNullOrEmpty(message)) 
     { 
      return string.Empty; 
     } 
     var builder = new TagBuilder("div"); 
     builder.AddCssClass("notice"); 
     builder.SetInnerText(message); 
     return builder.ToString(); 
    } 
} 

,並在視圖:

<%= Html.GetMessage() %> 

備註:不要忘記HTML編碼的消息的價值,如果你決定使用代碼的方式。

+0

Darin, 我喜歡這種方法,因爲默認情況下總是將<%= Html.GetMessage()%>添加到任何視圖並且只是「忘記」它會非常容易。那麼控制器邏輯可以決定是否向ViewData [「message」]添加任何內容。 現在,如果只有一種方法可以輕鬆定義視圖數據的關鍵字(不是'message'),那麼這將是一個很好的自包含可擴展的小幫手:) 編輯 - 我想當然是一個額外的參數可以添加到幫助器來定義該屬性 - 或者是否有更好的方法? – 2010-05-14 08:19:38

+0

這看起來不錯,謝謝你的例子。 – RyanW 2010-05-14 16:54:44

1

我認爲你所擁有的條件是最簡單的方法。控制感覺有點太「沉重」。如果你發現自己重複了很多,也許是一種輔助方法。