2011-07-26 45 views
7

我正在進行擴展。htmlAttributes未與我的分機中的標籤生成器合併

public static MvcHtmlString Image(this HtmlHelper helper, string src, object htmlAttributes = null) 
{ 
    TagBuilder builder = new TagBuilder("img"); 
    builder.MergeAttribute("src", src); 
    if (htmlAttributes != null) builder.MergeAttributes(htmlAttributes); 
    return MvcHtmlString.Create(builder.ToString(TagRenderMode.SelfClosing)); 
} 

這行:

if (htmlAttributes != null) builder.MergeAttributes(htmlAttributes); 

錯誤:

The type arguments for method 'System.Web.Mvc.TagBuilder.MergeAttributes<TKey,TValue>(System.Collections.Generic.IDictionary<TKey,TValue>)' cannot be inferred from the usage. Try specifying the type arguments explicitly. 

我曾嘗試:

if (htmlAttributes != null) builder.MergeAttributes((Dictionary<string, string>)htmlAttributes); 

if (htmlAttributes != null) builder.MergeAttributes((Dictionary<string, object>)htmlAttributes); 

我該如何得到這個工作?

回答

13

您需要通過創建RouteValueDictionary將匿名類型轉換爲字典。

builder.MergeAttributes(new RouteValueDictionary(htmlAttributes)); 

此構造函數將從對象的屬性中填充字典。

25

最好使用HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes)而不是新的RouteValueDictionary(htmlAttributes),因爲它支持使用下劃線拼寫的數據短線屬性(例如data_click),並且RouteValueDictionary沒有直接依賴關係。

+1

這對我來說真的很有幫助 - 我四處尋找這樣的東西。 –