Если помощник HTML берет idictionary в качестве параметра, как я использую его?
Я попробовал:
<%= Html.Blah( new { id = "blah" }) %>
Но это не работает.
<%= Html.Blah( new Dictionary<string, object>(){
{ "key", "value" },
{ "key1", someObj },
{ "blah", 1 }
} );
Если вы не хотите использовать общий словарь, Hashtable также реализует IDictionary.
Html.Blah(new Hashtable(){
{"id", "blah"}
});
Встроенные методы расширения HtmlHelper обычно предоставляют перегрузки, которые принимают объект
параметр вместо IDictionary
, чтобы позволить вам вызвать их, используя анонимный тип, как вы пытались.
Если это ваш собственный метод, вы можете создать другой метод расширения, который будет выглядеть примерно так:
public static string Blah(this HtmlHelper html, object htmlAttributes)
{
return html.Blah(new RouteValueDictionary(htmlAttributes));
}
Конструктор RouteValueDictionary принимает объект и заполняет себя, используя публичные свойства переданного объекта. Я полагаю, что именно это обычно делают встроенные методы расширения HtmlHelper.
В качестве альтернативы, вы можете вызвать метод следующим образом:
html.Blah(new RouteValueDictionary(new { id = "blah" }));
Я не смотрел, но кажется очевидным, что класс RouteValueDictionary делает некоторые размышления, чтобы иметь возможность определить свойства объекта. Просто имейте в виду, если вас это беспокоит.