Изучение выпадающих списков, я пытаюсь добавить страницу создания RSVP для nerddinner, как в блог Скотта Гуга с Html.DropDownListДля перечисления доступных обедов,
Я могу получить раскрывающийся список, но я не могу получить раскрывающееся меню, чтобы выбрать значение ( "Sample Dinner 2" ), которое я хочу. Я использую инициализатор для посева нескольких объектов обеда в db. База данных представляет собой sql ce 4 с использованием первого подхода к коду EF. Извините, я знаю, что это общая проблема и ненависть спросить, но честно потратили довольно много времени на это, но не могу заставить ее работать:
ViewModel
public class RSVPViewModel
{
public SelectList DinnersList { get; set; }
public RSVP Rsvp { get; set; }
public string SelectedItem { get; set; }
}
контроллер
//
//GET: /RSVP/Create
public ActionResult Create()
{
RSVP rsvp = new RSVP();
string selected = "Sample Dinner 2";
var typeList = new SelectList(dbc.Dinners.ToList(), "DinnerID", "Title", selected);
var viewModel = new RSVPViewModel { DinnersList = typeList, Rsvp = rsvp, SelectedItem = selected };
return View("Create", viewModel);
}
Просмотр
@Html.DropDownListFor(model => model.Rsvp.DinnerID, Model.DinnersList)
Результат HTML
<select data-val="true" data-val-number="The field DinnerID must be a number." data-val-required="The DinnerID field is required." id="Rsvp_DinnerID" name="Rsvp.DinnerID">
<option value="1">Sample Dinner 1</option>
<option value="2">Sample Dinner 2</option>
</select>
Таким образом, вы не выбираете выпадающий список со значением "Sample Dinner 2" при загрузке страницы. Список отображает ok и устанавливает правильный DinnerID, когда я делаю выбор, и нажмите "Отправить".
Игнорирует это:
@Html.DropDownListFor(x => x.SelectedItem, Model.DinnersList)
но не устанавливает или не связывается с Rsvp.DinnerID.
Это выбирается из списка, но не связывает (или не устанавливает Rsvp.DinnerID)
@Html.DropDownList("DinnersList")
Я хочу сохранить его mvc3, поэтому хочу реализовать с сильным типом с использованием подхода ViewModel (без ViewData) и предпочтительно с использованием Html.DropDownListFor(не Html.DropDownList).Viewbag кажется ненужным для этого случая.
Спасибо!
Edit1
Думаю, что я должен использовать selectList из selectListItems Я пробовал этот подробный подход:
RSVP rsvp = new RSVP();
string selected = "2";
List<SelectListItem> dinners = new List<SelectListItem>();
foreach (Dinner dinner in dbc.Dinners.ToList())
{
SelectListItem slDinner = new SelectListItem();
slDinner.Value = dinner.DinnerID.ToString();
slDinner.Text = dinner.Title;
slDinner.Selected = (slDinner.Value == selected);
dinners.Add(slDinner);
}
var dinnersList = new SelectList(dinners, "Value", "Text", selected);
var viewModel = new RSVPViewModel { DinnersList = dinnersList, Rsvp = rsvp, SelectedItem = selected };
Однако до сих пор нет работы. Должен ли я использовать свойство ViewModel SelectedItem в: @Html.DropDownListFor.. как-то? Что-то вроде:
@Html.DropDownListFor(x => x.SelectedItem, Model.DinnersList)
но как получить выбранное значение для установки Rsvp.DinnerID. Я думаю, что это называется привязкой.