Подтвердить что ты не робот

Html helper принимает словарь <string, object>, как использовать этот параметр?

Если html-помощник принимает idictionary как параметр, как его использовать?

Я пробовал:

<%= Html.Blah( new { id = "blah" }) %>

Но это не работает.

4b9b3361

Ответ 1

<%= Html.Blah( new Dictionary<string, object>(){
                                                   { "key", "value" },
                                                   { "key1", someObj },
                                                   { "blah", 1 }
                                               } );

Ответ 2

На всякий случай другие сталкиваются с этим вопросом. Существует вспомогательный метод, который преобразует анонимный объект в словарь.

Например:

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
}

Ответ 3

Встроенные методы расширения 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 делает некоторое отражение, чтобы иметь возможность идентифицировать свойства объекта. Просто имейте в виду, в случае, если это вас беспокоит.

Ответ 4

Если вы не хотите использовать Generic Dictionary, Hashtable также реализует IDictionary.

 Html.Blah(new Hashtable(){
                        {"id", "blah"}
                    });