Узнав о раскрывающихся списках, я пытаюсь добавить страницу создания RSVP для nerddinner, как в Блог Скотта Гу с Html.DropDownListFor перечислением доступных обедов.
Я могу заполнить раскрывающийся список, но я не могу получить раскрывающийся список, чтобы предварительно выбрать значение («Образец обеда 2»), которое я хочу. Я использую инициализатор для заполнения нескольких объектов обеда в базе данных. База данных - 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>
Так что предварительный выбор раскрывающегося списка со значением «Образец обеда 2» при загрузке страницы не выполняется. В списке отображается ОК и устанавливается правильный 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. Я думаю, это называется привязкой.
new SelectList(...)
, элемент, свойство Selected которого истинно? - person StriplingWarrior   schedule 26.01.2011