将集合传递给MVC.NET HtmlHelpers更有效率?建议?

时间:2010-02-10 14:50:30

标签: c# asp.net-mvc html-helper

我有一个带有以下签名的Html帮助器方法:

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

在定义中有点麻烦,甚至在使用Helper方法时也是如此:

<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 个答案:

答案 0 :(得分: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) %>

更新:

以下是如何将匿名类型转换为强类型字典:

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);
    }
}