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 с дополнительным подэлементом для каждого элемента в списке.