Как добавить дополнительные htmlattributes в расширение для DropDownListFor - PullRequest
11 голосов
/ 09 марта 2012

Я пытаюсь написать расширение для DropDownListFor:

public static MvcHtmlString DropDownListFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression, IEnumerable<SelectListItem> selectList, object htmlAttributes, bool enabled)
{
    return htmlHelper.DropDownListFor(expression, selectList, null /* optionLabel */, HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes));
}

Чего я хочу добиться, если для параметра false установлено значение false, без изменений, но для параметра true установлено значение true, я хочу добавитьатрибуты html перед тем, как передать их AnonymousObjectToHtmlAttributes.

Есть идеи, как это сделать?

Ответы [ 2 ]

33 голосов
/ 09 марта 2012

Simple! HtmlHelper.AnonymousObjectToHtmlAttributes возвращает RouteValueDictionary. Вы можете добавить значение в этот словарь, вам не нужно добавлять свойство в анонимный объект.

public static MvcHtmlString DropDownListFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression, IEnumerable<SelectListItem> selectList, object htmlAttributes, bool enabled)
{
    var attrs = HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes);
    if (!enabled)
    {
        attrs.Add("disabled", "disabled");
    }
    return htmlHelper.DropDownListFor(expression, selectList, null /* optionLabel */, attrs);
}
2 голосов
/ 09 марта 2012

Решение архивных работ.Однако то, что вы пытаетесь сделать, написание расширения - это избыточное убийство.

Просто напишите на ваш взгляд что-то вроде:

@Html.DropDownListFor(m => m.Id, Model.Values, new { disabled = "disabled" })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...