2009-07-27 23 views
2

我的ASP.NET MVC視圖是越來越「堆滿了」,因爲很多時候我需要有條件地顯示事情導致長期內聯C#代碼,包括硬盤讀取(僅演示目的)三元運算符的語句,如下面和類似的結構。ASP.NET MVC:視圖中何時處理以及何時使用助手方法?

<%= Model.SupportsFeature ? Model.HasName ? "This model supports the feature and has a name" : "This model supports the feature and has no name" : "This model doesn't support the feature" %> 

現在,我要保持這種(仍可查看相關)的邏輯視圖,或者我應該改爲:

1)寫的HtmlHelper GetSupportedText(這...擴展方法

2)將擴展方法寫入實際的Model類?

我試圖保持我的代碼簡潔,並保持相關的東西在一起,但我真的不知道如何構造這個和處理與<%%>雜亂的意見。

感謝您對此的意見!

編輯: 我也關心從C#助手方法(字符串)中提出HTML - 這是很難調試真的很醜。

回答

3

可以使用TagBuilder類,使HTML字符串,如果你喜歡它超過的String.Format()或字符串連接。我還使用System.Xml.Linq類來處理非常複雜的HTML。

,我遵循的一般規則是:「如果如果在那裏,寫一個HTML幫手。」我不能爲此聲明提供信用,但我不記得我聽到了什麼。這個規則會導致HTML助手擴展的爆炸,所以我使用命名空間來組織我的擴展。我創建了一個擴展名稱空間,該名稱空間在我添加到web.config的視圖中共享,然後爲每個特定視圖製作特定於視圖的擴展代碼文件和名稱空間。如果您以合理的方式組織您的代碼,並且不會有大量不必要的助手將您的HTML對象混淆在不需要的地方,這將更容易找到您的擴展所在的位置。

下面是一個例子,使用默認的應用程序名稱MvcApplication1。

加進web.config中包括在所有視圖我的共享助手:

<pages> 
    <namespaces> 
    <add namespace="MvcApplication1.Helpers.Shared"/> 
    </namespaces> 
</pages> 

這是家用/ About.aspx我的視圖特定的助手的簡化和人爲的例子。

namespace MvcApplication1.Helpers.About 
{ 
    public static class AboutViewExtensions 
    { 
     public static string AboutViewHelper(this HtmlHelper Html) 
     { 
      var tb = new TagBuilder("b"); 
      tb.SetInnerText("bold text"); 
      return tb.ToString(TagRenderMode.Normal); 
     } 
    } 
} 

這是使用<%@ Import %>指令引入我的名稱空間的About.aspx視圖。

<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage" %> 
<%@ Import Namespace="MvcApplication1.Helpers.About" %> 

<asp:Content ID="aboutContent" ContentPlaceHolderID="MainContent" runat="server"> 
    <h2>About</h2> 
    <p> 
     <%= Html.AboutViewHelper() %> 
    </p> 
</asp:Content> 
4

如果您使用的是ViewModel方法,你能堅持這個邏輯到您的視圖模型的方法/吸氣。

2

這將進入助手類 - 最好作爲擴展方法。在那裏,你也可以應用本地化(如果你需要)。

另一種方法是創建一個新的屬性(使用共享類,如果這是通過Sql的Linq生成),這是否爲你(輸出條件消息)。這樣你可以使用其他輸出(如JSON等)的屬性。底線 - 做什麼有效。你是正確的從視圖中刪除有條件的東西 - 太難調試了。如果你把它扔在模型上,你可以測試它:)

+0

我認爲如果它只涉及文本輸出(如我上面的示例中所示)而沒有任何必要的HTML,那麼你建議的新屬性是好的。當它涉及HTML雖然,那麼也許一個助手類會更好。 – Alex 2009-07-28 16:46:25

相關問題