HTML-помощник DropDownList объяснил
Может кто-нибудь объяснить, как это работает? (какая перегрузка используется)
@Html.DropDownList("FinancialYearID", "Select FY")
FinancialYearID - это пакет SelectList в представлении. Почему он передается как строка?
Также как добавить пользовательские атрибуты в элемент ввода?
Добавление третьего параметра
new { @class = "foo" }
не работает?
Можно ли добавлять атрибуты данных с помощью помощников по умолчанию?
Спасибо
Ответы
Ответ 1
Вы вызываете эту перегрузку. Это создает раскрывающийся список с именем "FinancialYearID" (это означает, что выбранное значение будет привязываться к модели или свойству ViewBag под названием "FinancialYearID" ) и "Выбрать FY" в качестве текста выбора заполнителя (пустой).
Если вы хотите добавить класс, вам понадобится помощник DropDown(string, IEnumerable, string, object)
:
@Html.DropDownList("FinancialYearID", null, "Select FY", new { @class = "foo" })
Здесь вы также можете заполнить DropDownList, передав IEnumerable
(например, SelectList
), где я прошел null
.
Да, вполне возможно передать атрибут данных. просто замените дефис символом подчеркивания:
@Html.DropDownListFor("FinancialYearID", null,
"Select FY", new { @data_something = "foo" })
Если у вас есть свойство модели, к которому вы пытаетесь привязать выбранное значение, вы можете передать выражение lamba, чтобы указать свойство, которое вы хотите связать, и структура создаст соответствующий name
:
@Html.DropDownList(m => m.FinancialYearID, MySelectList,
"Select FY", new { @data_something = "foo" })
Я бы также советовал помещать SelectList
в модель в исходный запрос GET, а не использовать ViewBag
.
Ответ 2
В вашем примере вы используете
DropDownList(this HtmlHelper htmlHelper, string name, string optionLabel)
Чтобы получить эффект, который вы хотите, вы должны использовать следующий код:
@Html.DropDownListFor(model => model.FinancialYearID, (SelectList)ViewBag.FinancialYearID, "Select FY", new { @class = "foo" })
(перегрузка DropDownListFor<TModel, TProperty>(this HtmlHelper<TModel>, Expression<Func<TModel,TProperty>>, IEnumerable<SelectListItem>,
string,
object)
)
или, если один из ваших SelectList отмечен как выбранный, используйте следующий код:
@Html.DropDownListFor(model => model.FinancialYearID, (SelectList)ViewBag.FinancialYearID, new { @class = "foo" })
(перегрузка DropDownListFor<TModel, TProperty>(this HtmlHelper<TModel>, Expression<Func<TModel,TProperty>>, IEnumerable<SelectListItem>,
object)
)
P.S.
Не забудьте указать элемент ViewBag в SelectList, потому что компилятор будет считать, что вторым параметром является объект.
Ответ 3
Возможно, вы могли бы использовать нижеследующий. Для передачи атрибутов данных используйте знак подчеркивания _
как new {@data_myname=value}
MSDN
public static MvcHtmlString DropDownList(
this HtmlHelper htmlHelper,
string name,
IEnumerable<SelectListItem> selectList,
Object htmlAttributes
)
Параметры
HtmlHelper
Тип: System.Web.Mvc.HtmlHelper
Вспомогательный экземпляр HTML, который расширяет этот метод.
имя
Тип: System.String
Имя возвращаемого поля формы.
SelectList
Тип: System.Collections.Generic.IEnumerable<SelectListItem>
Коллекция объектов SelectListItem, которые используются для заполнения раскрывающегося списка.
htmlAttributes
Тип: System.Object
Объект, который содержит атрибуты HTML для установки для элемента.
Возвращаемое значение
Тип: System.Web.Mvc.MvcHtmlString
Элемент select HTML с дополнительным подэлементом для каждого элемента в списке.