Как установить значение для параметра по умолчанию с помощью Html.DropDownList - PullRequest
6 голосов
/ 24 февраля 2009

Я использую ASP MVC RC1.

Форма, которую я использую, содержит выпадающий список, который я поместил в представление с этим кодом.

<%= Html.DropDownList("areaid", (SelectList)ViewData["AreaId"], "Select Area Id")%>

Однако при рендеринге это то, что я получаю

<select id="areaid" name="areaid">
   <option value="">Select Area Id</option>
   <option value="1">Home</option>
   ...
</select> 

Мне бы хотелось, чтобы параметр «Выбрать идентификатор области» имел значение 0 и помечал его как выбранный по умолчанию, чтобы он соответствовал другим значениям, и я могу проверить, была ли выбрана область в качестве является обязательным значением AreaId является целым числом, поэтому, когда я в данный момент щелкаю форму, вообще не касаясь выпадающего списка, MVC жалуется, что "" не является целым числом, и выдает ошибку привязки.

ТАК, как мне установить значение для параметра по умолчанию, а затем сделать его выбранным в форме?

Спасибо, Дэн

Ответы [ 4 ]

21 голосов
/ 24 февраля 2009

Я думаю, у вас есть три четыре варианта. Во-первых, когда вы создаете свой SelectList или перечислимый SelectItemList, добавьте к выбору метку опции и значение по умолчанию. Если поместить его сверху, он станет значением по умолчанию, если в модели еще не выбрано какое-либо другое значение. Во-вторых, вы можете построить выбор (и параметры) «вручную» в представлении, используя цикл для создания параметров. Опять же, перед вашим выбором по умолчанию, если он не указан в модели. В-третьих, используйте расширение DropDownList, но измените значение первого параметра, используя javascript после загрузки страницы.

По-видимому, невозможно использовать расширение DropDownList для назначения значения для optionLabel, поскольку оно жестко запрограммировано для использования string.Empty. Ниже приведен соответствующий фрагмент кода от http://www.codeplex.com/aspnet.

    // Make optionLabel the first item that gets rendered.
    if (optionLabel != null) {
        listItemBuilder.AppendLine(ListItemToOption(new SelectListItem() { Text = optionLabel, Value = String.Empty, Selected = false }));
    }

РЕДАКТИРОВАТЬ : И наконец, лучший способ состоит в том, чтобы ваша модель приняла значение Nullable и пометила его как требуется с помощью RequiredAttribute. Я бы рекомендовал использовать модель представления, а не модель сущности для представления. Поскольку значение равно Nullable, пустая строка будет работать нормально, если отправлена ​​обратно без выбора значения. Установка его в качестве обязательного значения приведет к сбою проверки модели с соответствующим сообщением о том, что это значение требуется. Это позволит вам использовать помощника DropdownList как есть.

public AreaViewModel
{
    [Required]
    public int? AreaId { get; set; }

    public IEnumerable<SelectListItem> Areas { get; set; }
    ...
}

@Html.DropDownListFor( model => model.AreaId, Model.Areas, "Select Area Id" )
3 голосов
/ 22 марта 2012

Для MVC3, SelectList имеет перегрузку, в результате чего вы можете определить выбранное значение.

Function Create() As ViewResult

        ViewBag.EmployeeId = New SelectList(db.Employees, "Id", "Name", 1)

        Return View()

    End Function

В этом случае я знаю, что 1 - это идентификатор элемента списка по умолчанию, который я хочу, но, вероятно, вы можете выбрать значение по умолчанию с помощью запроса или того, что когда-либо плавает на вашей лодке.

1 голос
/ 30 марта 2015

Вместо передачи элемента по умолчанию из определения в представлении можно добавить данные «Выбор области» в 0-й индекс списка из контроллера.

Таким образом, данные Select Area имеют индексное значение 0.

0 голосов
/ 04 октября 2017

Я хотел использовать один и тот же SelectList для нескольких раскрывающихся списков и не хотел дублировать SelectList в модели, поэтому я просто добавил новый метод Html Extension, который принял значение и установил выбранный элемент.

public static MvcHtmlString DropDownList(this HtmlHelper htmlHelper, string name, string value, IList<SelectListItem> selectList, object htmlAttributes)
{
    IEnumerable<SelectListItem> items = selectList.Select(s => new SelectListItem {Text = s.Text, Value = s.Value, Selected = s.Value == value});
    return htmlHelper.DropDownList(name, items, null /* optionLabel */, htmlAttributes);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...