Я думаю, у вас есть три четыре варианта. Во-первых, когда вы создаете свой 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" )