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

#asp.net #asp.net-mvc-4 #razor #strongly-typed-view

#asp.net #asp.net-mvc-4 #razor #строго типизированный-просмотр

Вопрос:

Следующий код «работает», но конечные результаты не такие, как я ожидал. Я получаю dropdownlist со всеми странами, как и ожидалось; по умолчанию Соединенные Штаты находятся в самом верху списка. Но Соединенные Штаты по-прежнему остаются выбираемыми, если вы прокрутите список вниз, теперь у меня есть две записи «Соединенные Штаты»…

Также стоит отметить, что при моей проверке выбор по умолчанию «Соединенные Штаты» считается недействительным, то есть он показывает мне сообщение о проверке «пожалуйста, выберите страну». Если я затем выберу запись «Соединенные Штаты», расположенную дальше по списку, сообщение о проверке исчезнет.

Почему это происходит? Я неправильно это понимаю?

ПРОСМОТР МОДЕЛИ

 public class ProfileViewModel
{

    public class CountriesDropdown
    {
        public string defaultSelection { get; set; }
        public IEnumerable<SelectListItem> dropdownViewModel { get; set; }
    }

    public CountriesDropdown countriesDropdownViewModel { get; set; }

    [Required]
    [DataType(DataType.Text)]
    [StringLength(100)]
    [Display(Name = "Country of Residence: ")]
    public string CountryResidence { get; set; }
}
  

Вид

 @Html.DropDownListFor(p => p.CountryResidence, Model.countriesDropdownViewModel.dropdownViewModel, Model.countriesDropdownViewModel.defaultSelection, new { style = "max-width: 215px;", id = "cbCountry", @class = "validate[required]" })
  

КОНТРОЛЛЕР

 private ProfileViewModel PopulateAllDropdown(ProfileViewModel model)
{
   model.countriesDropdownViewModel = new ProfileViewModel.CountriesDropdown();
   model.countriesDropdownViewModel.dropdownViewModel = _DBCall.GetCountriesDropdownListPopulated();
   model.countriesDropdownViewModel.defaultSelection  = "United States";

   return model;
}
  

Комментарии:

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

2. если вы показываете GetCountriesDropdownListPopulated() определение, вам нужно установить выбранное по умолчанию из их

3. Спасибо, Эхса Саджад, после прочтения вашего комментария я смог это исправить. Я переместил выбор по умолчанию внутри GetCountriesDropdownListPopulated() кода и работает нормально. Почему бы не опубликовать его в качестве ответа, чтобы я мог его принять?

Ответ №1:

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

Ответ №2:

пожалуйста, установите AppendDataBoundItems=»false» в выпадающем списке

Например:

  <asp:DropDownList ID="DropDownList1" runat="server" AppendDataBoundItems="false">
    </asp:DropDownList>