2010-02-10 46 views
0

我有一個HTML輔助方法具有以下簽名:更高效地將集合傳遞給MVC.NET HtmlHelpers?建議?

public static string MyActionLink(this HtmlHelper html 
, string linkText 
, List<KeyValuePair<string, object>> attributePairs 
, bool adminLink){} 

我還有一個程序,然後這需要所有的屬性對,並將它們合併到標籤的屬性/值對:

ExtensionsUtilities.MergeAttributesToTag(tag, attributePairs); 

一切都很好。然而問題是,所述參數

, List<KeyValuePair<string, object>> attributePairs 

是在定義有點麻煩,甚至moreso在使用助手方法:

<span class="MySpan"> 
    <%= Html.MyActionLink(Html.Encode(item.Name) 
     , new List<KeyValuePair<string, object>> 
       { 
        Html.GetAttributePair("href", Url.Action("ACTION","CONTROLLER")), 
        Html.GetAttributePair("Id", Html.Encode(item.Id)), 
        Html.GetAttributePair("customAttribute1", Html.Encode(item.Val1)), 
        Html.GetAttributePair("customAttribute2", Html.Encode(item.Val2)) 
       }, false)%> 
</span> 

Html.GetAttributePair()只是返回一個KeyValuePair在試圖整理一些東西)

我只是好奇,現在如果有人可以建議一個不同的(也許更有效的開發友好)方法來達到相同的結果嗎?

謝謝你們

戴夫

回答

1

如何使用匿名類型:

public static string MyActionLink(
    this HtmlHelper html, 
    string linkText, 
    object attributePairs, 
    bool adminLink) 
{} 

可稱爲是這樣的:

<%= Html.MyActionLink(
    Html.Encode(item.Name), 
    new { 
     href = Url.Action("ACTION","CONTROLLER"), 
     id = tml.Encode(item.Id), 
     customAttribute1 = Html.Encode(item.Val1), 
     customAttribute2 = Html.Encode(item.Val2) 
    }, 
    false) %> 

UPDATE:

下面是如何將匿名類型轉換成一個強類型的字典:

var values = new 
{ 
    href = "abc", 
    id = "123" 
}; 

var dic = new Dictionary<string, object>(StringComparer.OrdinalIgnoreCase); 
if (values != null) 
{ 
    foreach (PropertyDescriptor descriptor in TypeDescriptor.GetProperties(values)) 
    { 
     object value = descriptor.GetValue(values); 
     dic.Add(descriptor.Name, value); 
    } 
} 
+0

嗨達林,對答覆表示感謝。這是一個非常明確的答案,並且它最終的作品...除了現在不能將類型轉換回可以迭代我的ExtensionsUtilities.MergeAttributesToTag(tag,attributePairs)的對象; 一行。我可以看到,雖然匿名類型可能對我的應用程序的其他部分有用,所以我仍然很高興看到您的回覆:-) – DaveDev 2010-02-10 15:40:10

+0

@Darin,謝謝。這很棒。 – DaveDev 2010-03-02 11:57:14