1

Получить данные из базы данных и липкости на вариант я планирую быть выбран по умолчанию:установки выбранного значения сильно типизированных MVC SelectList Trouble

public List<Forester> GetForesters() 
    { 
     var data = _db.tblForester.ToList(); 

     List<Forester> ForesterList = new List<Forester>(); 

     foreach (var item in data) 
     { 
      Person person = new Person() 
      { 
       Key_ = item.Key_, 
       FirstName = item.FirstName, 
       LastName = item.LastName, 
       District = item.District, 
       County = item.County 
      }; 
      PersonList.Add(person); 
     } 
     PersonList.Add(new Person { Key_ = -1, FirstName = "- Select ", LastName = "Person -" }); 
     return PersonList; 
    } 

Модель имеет два свойства:

public int SelectedPersonId { get; set; } 
    public IEnumerable<SelectListItem> PersonList { get; set; } 

Контроллер получает список из базы данных и делает выбор:

 vm.SelectedPersonId = -1; 
     vm.PersonList = new SelectList(repo.GetPeople(), "Key_", "PersonsName", vm.SelectedpersonId); 

Я пробовал пару пути в представлении:

   @Html.DropDownListFor(m => m.Key_, new SelectList(Model.PersonList, "Value", "Text", -1), new { @class = "form-control ddl" }) 

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

Вот как HTML делает:

<form action="/Forester/Activity" method="post"><select class="form-control ddl" data-val="true" data-val-number="The field Key_ must be a number." data-val-required="The Key_ field is required." id="Key_" name="Key_"><option value="1">DIANE PARTRIDGE</option> 
<option value="2">GARY GROTH</option> 

...

Один я добавил на дне:

<option value="-1">- Select Forester -</option> 

ответ

1

, если у вас есть следующая модель

public int SelectedPersonId { get; set; } 
public IEnumerable<SelectListItem> PersonList { get; set; } 

Вы шо пакетирования используют

@Html.DropDownListFor(m => m.SelectedPersonId , Model.PersonList, new { @class = "form-control ddl" }) 

DropDownListFor помощник оценит SelectedPersonId и он будет пытаться выбрать его

+1

Кроме того, линия, где вы установите 'vm.PersonList' не должен построить' SelectList'. Просто сделайте 'repo.GetPeople(). Выберите (m => новый SelectListItem {...})', чтобы построить ваш 'IEnumerable '. –

+0

@ChrisPratt Хорошая точка! –

+0

Спасибо, ребята, сейчас работаем. Что касается контрольной линии, какая разница? – BattlFrog

1

Если вы используете следующий, последний параметр указывает исходный текст (опция метки), поэтому вам не нужно будет использовать фиктивная -1 значение:

Html.DropDownListFor(m => m.SelectedPersonId, 
      Model.PersonList as List<SelectListItem>, "Select Forester -"}) 

SelectExtensions