2011-02-24 24 views
1

在MVC 3中創建一個站點,我有這個代碼片段,我在設計的幾個部分使用。這是一個爲網站上的模塊創建頭像的設計代碼。 現在想知道這是否是調用此代碼段的最佳方式?我應該使用助手還是有更好的方法?MVC 3,最好的方法來調用這個HTML

今天我這樣做:

public static IHtmlString FrameModuleHeader(this HtmlHelper helper, int Type, string Headline) 
    { 
     StringBuilder html = new StringBuilder(); 
      html.Append("<div class='module_top'>"); 
       html.Append("<div class='module_top_left'></div>"); 
       html.Append("<div class='module_top_middle_" + Type + "'><div class='module_top_headline'><h4>" + Headline + "</h4></div></div>"); 
       html.Append("<div class='module_top_right'></div>"); 
      html.Append("</div>"); 
     return MvcHtmlString.Create(html.ToString()); 
    } 

然後通過調用視圖中的我的HTML助手:

@ Html.FrameModuleHeader(1, 「我的標題」)

謝謝! /Mike

回答

5

我可能會使用部分視圖或顯示模板來代替HTML助手,因爲在C#代碼中填充這麼多的HTML看起來很難看。

因此,例如,我想有一個視圖模型:

public class SomeViewModel 
{ 
    public int Type { get; set; } 
    public string Headline { get; set; } 
} 

和部分:

@model AppName.Models.SomeViewModel 

<div class="module_top"> 
    <div class="module_top_left"></div> 
    <div class="[email protected](Model.Type)"> 
     <div class="module_top_headline"> 
      <h4>@Model.Headline</h4> 
     </div> 
    </div> 
    <div class="module_top_right"></div> 
</div> 

然後:

@Html.Partial("Foo", new SomeViewModel { Type = 1, Headline = "My headline" }) 

當然,這並不意味着,您的HTML幫助程序將無法工作。只是通常應該使用HTML助手來生成HTML的小片段,在這個特殊的例子中,這似乎並不是這種情況。此外,如果在視圖中使用HTML智能感知,您可以幫助您識別未封閉的標籤,未正確格式化的HTML,而在C#中,所有內容都是一個大的魔術字符串。

以及您的HTML幫助最後再說一句,如果你決定使用它:把它的字符串生成器內之前,確保你HTML編碼Headline字符串或者你可能會得到不好的XSS驚喜。

0

真的沒有推薦的方法。你這樣做的方式非常乾淨。所以我沒有理由去改變它。

0

另一種選擇是使用局部視圖。你可以把它放在/ Views/Shared中,這樣它就可以用於一切。這很好的一個原因是,它可以更容易編輯而無需推出新的代碼庫。如果這個輸出永遠不會改變,那麼也許沒有必要。

0

你當然可以通過刪除不必要的html標籤來治癒由divitus引起的代碼膨脹。

public static IHtmlString FrameModuleHeader(this HtmlHelper helper, int Type, string Headline) 
{ 
    StringBuilder html = new StringBuilder(); 
     html.Append("<div class='module_top'>"); 
      html.Append("<h4 class='module_top_middle_" + Type + "'>" + HtmlEncode(Headline) + "</h4>"); 
     html.Append("</div>"); 
    return MvcHtmlString.Create(html.ToString()); 
} 
相關問題