Если html-помощник принимает idictionary как параметр, как его использовать?
Я пробовал:
<%= Html.Blah( new { id = "blah" }) %>
Но это не работает.
Если html-помощник принимает idictionary как параметр, как его использовать?
Я пробовал:
<%= Html.Blah( new { id = "blah" }) %>
Но это не работает.
<%= Html.Blah( new Dictionary<string, object>(){
{ "key", "value" },
{ "key1", someObj },
{ "blah", 1 }
} );
На всякий случай другие сталкиваются с этим вопросом. Существует вспомогательный метод, который преобразует анонимный объект в словарь.
Например:
HtmlHelper.AnonymousObjectToHtmlAttributes( new { ng_model = "vm" } );
Другими словами, вы можете создать свой HTML-помощник в соответствии с вопросом OP, чтобы взять объект и использовать этот вспомогательный метод внутри. Например.
public static string Blah(this HtmlHelper html, object htmlAttributes)
{
// Create a dictionary from the object
HtmlHelper.AnonymousObjectToHtmlAttributes( htmlAttributes );
// ... rest of implementation
}
Встроенные методы расширения HtmlHelper обычно предоставляют перегрузки, которые принимают параметр object
вместо IDictionary<string, object>
, чтобы вы могли называть их с использованием анонимного типа, как вы пробовали.
Если это ваш собственный метод, вы можете создать другой метод расширения, который выглядит примерно так:
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 делает некоторое отражение, чтобы иметь возможность идентифицировать свойства объекта. Просто имейте в виду, в случае, если это вас беспокоит.
Если вы не хотите использовать Generic Dictionary, Hashtable также реализует IDictionary.
Html.Blah(new Hashtable(){
{"id", "blah"}
});