Почему мое значение по умолчанию для DropDownListFor не работает должным образом?

По какой-то причине мое значение по умолчанию для моего Html.DropDownListFor не работает:

@Html.DropDownListFor(model => model.DomainList,
    new SelectList(Model.DomainList, "DomainId", "Name", Model.SingleDomain.DomainId),
    new { @class = "form-control" })

Есть идеи, почему?

ОБНОВЛЕНИЕ

С ответом ниже я обновил свой код до следующего:

@Html.DropDownListFor(model => model.SelectedDomain, 
    new SelectList(Model.DomainList, "DomainId", "Name", Model.SelectedDomain),
    "Select a Domain", 
    new { @class = "form-control" })

person CIA    schedule 12.01.2014    source источник
comment
Есть ли значение Model.SingleDomain.DomainId в списке значений в model.DomainList?   -  person Jack    schedule 13.01.2014
comment
да. Даже если я ввожу значение, которое, как я знаю, существует вместо этой переменной, раскрывающийся список не устанавливает значение по умолчанию.   -  person CIA    schedule 13.01.2014
comment
Кроме того, как правило, когда вы делаете DropDownListFor, это для int (для хранения выбранного значения), а не для самого списка. Это означает, что это должно выглядеть примерно так: @Html.DropDownListFor(x => x.DomainId, ....)   -  person Jack    schedule 13.01.2014
comment
Конечно, но есть ли какие-нибудь подсказки, почему элемент, выбранный по умолчанию, не будет работать?   -  person CIA    schedule 16.01.2014
comment
Вы пробовали мое последнее предложение комментариев?   -  person Jack    schedule 16.01.2014
comment
Вы привязываете выбранный элемент раскрывающихся списков к списку, который не имеет смысла. Вам нужно привязать его к int id.   -  person Jack    schedule 16.01.2014


Ответы (2)


Попробуй это:

В вашей ViewModel добавьте целое число для хранения выбранного идентификатора домена:

public int SelectedDomainId { get; set; }

Измените свой DropDownListFor на:

@Html.DropDownListFor(model => model.SelectedDomainId,
    new SelectList(Model.DomainList, "DomainId", "Name", Model.SingleDomain.DomainId),
    new { @class = "form-control" })

Теперь при обратной передаче выбранный идентификатор будет опубликован в SelectedDomainId.

Или вы можете добавить объект одного домена к своей виртуальной машине (чтобы указать, какой из них был выбран):

public Domain SelectedDomain { get; set; }

И измените свой DropDownListFor на:

@Html.DropDownListFor(model => model.SelectedDomain,
        new SelectList(Model.DomainList, "DomainId", "Name", Model.SingleDomain.DomainId),
        new { @class = "form-control" })

Обычно я использую выбранный идентификатор, но думаю, что любой из них должен работать.

Вот еще один хороший пример:

MVC3 DropDownListFor — простой пример?

person Jack    schedule 16.01.2014

Если у кого-то возникли проблемы с Html.DropdownList, имейте в виду, что

@Html.DropDownList("Country", ViewBag.Country as List<SelectListItem>) --> не выбирает значение по умолчанию

@Html.DropDownList("Countries", ViewBag.Country as List<SelectListItem>) --> выбирает значение по умолчанию

Для получения дополнительной информации см.: http://www.binaryintellect.net/articles/69395e7d-7c7c-4318-97f5-4ea108a0da97.aspx

person MTZ    schedule 18.12.2017