Asp.net-Mvc-2
如何連接多個 MvcHtmlString 實例
由於在MSDN中找到了以下資訊,我對如何連接 MvcHtmlString 實例有一些疑問:
MvcHtmlString 類表示不應再次編碼的 HTML 編碼字元串
使用這樣的程式碼時,我是否冒著兩次對字元串進行 HTML 編碼的風險:
var label = Html.LabelFor(model => model.Email); var textbox = Html.TextBoxFor(model => model.Email); var validation = Html.ValidationMessageFor(model => model.Email); var result = MvcHtmlString.Create( label.ToString() + textbox.ToString() + validation.ToString());(注意:這應該進入 HtmlHelper 擴展方法以減少視圖中的程式碼重複)。
你的程式碼是正確的。
來自 MSDN 的該片段意味著編碼視圖引擎(例如使用時 .NET 4 中的 Aspx 視圖引擎
<%: %>或 MVC 3 中的 Razor 視圖引擎)不應重新編碼對象的字元串值。例如:
string s = "<tag>"; var hs = MvcHtmlString.Create(s); <%: s %> -- outputs "<tag>" <%: hs %> -- outputs "<tag>"
太糟糕了 C# 不允許我們在這裡覆蓋 + 運算符!改用擴展方法怎麼樣?
public static MvcHtmlString Concat(this MvcHtmlString first, params MvcHtmlString[] strings) { return MvcHtmlString.Create(first.ToString() + string.Concat(strings.Select(s => s.ToString()))); }這可能會被優化,但您可以使用它執行。證明這不會通過單元測試對字元串進行雙重編碼應該是相當簡單的。
使用範例:
label.Concat(textbox, validation)現在是我部落格的無恥外掛:使用 TagBuilder 或 HtmlTags 清理您的 HTML