Проблема с параметром MVC DropDownList - PullRequest
1 голос
/ 17 марта 2009

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

<%=Html.DropDownList("values", CType(ViewData("values"), IEnumerable(Of SelectListItem)), "No values", New With {.onchange = "this.form.submit();"})%>

Поскольку значение ViewData названо так же, как и раскрывающийся список, помощник HTML позволяет выполнять следующую работу:

<%=Html.DropDownList("values", "No values")%>

но как только я попытаюсь добавить код обмена:

<%=Html.DropDownList("values", "No values", New With {.onchange = "this.form.submit();"})%>

Я получаю сообщение об ошибке «Не удалось разрешить перегрузку, поскольку невозможно вызвать доступный« DropDownList »без сужающего преобразования».

Как воспользоваться преимуществами вспомогательной функции HTML, но при этом указать атрибуты htmlAttributes?

1 Ответ

1 голос
/ 17 марта 2009

EDIT

Глядя на исходный код в Интернете, выясняется, что, в отличие от большинства других расширений HtmlHelper, расширения Select не проверяют наличие нулевых значений и по умолчанию загружаются на основе модели / представления данных. Если вы не хотите писать свое собственное расширение, похоже, что лучший способ - привести данные представления так, как вы это делали в первом примере. После проверки собственного кода я обнаружил, что это именно то, что я делаю.

Исходный ответ оставлен для контекста:

Просто укажите список выбора как Nothing, и он будет извлекать его из вашей модели / представления данных, как вы ожидаете. Это позволяет компилятору соответствовать существующей сигнатуре метода, но не требует, чтобы вы указали ему точный список для использования. Если вы посмотрите на исходный код (www.codeplex.com/aspnet), вы увидите, что методы с меньшим количеством параметров выполняют именно такую ​​замену, вызывая методы с большим количеством параметров с подходящими значениями по умолчанию.

<%=Html.DropDownList("values",
                     Nothing,
                     "No values",
                     New With {.onchange = "this.form.submit();"})%>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...