Как добавить дополнительные html атрибуты в расширение для DropDownListFor
Я пытаюсь написать расширение для 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, но если включено, это правда. Я хочу добавить @disabled="disabled"
в атрибуты html, прежде чем давать им AnonymousObjectToHtmlAttributes
.
Любые идеи о том, как это сделать?
Ответы
Ответ 1
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
Решение архивных работ. Тем не менее, для того, что вы пытаетесь написать, расширение является излишним.
Просто напишите в своем представлении что-то вроде:
@Html.DropDownListFor(m => m.Id, Model.Values, new { disabled = "disabled" })