我有一个带有以下签名的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以尝试整理一些东西)
我现在只是好奇,如果有人可以提出一个不同的(可能更有效和开发人员友好)的方法来实现相同的结果?
谢谢大家
戴夫
答案 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);
}
}