DropDownLists, вероятно, моя наименее любимая часть работы с инфраструктурой MVC. У меня есть несколько раскрывающихся меню в форме, выбранные значения которых мне нужно передать в ActionResult, который принимает модель в качестве параметра.
Разметка выглядит так:
<div class="editor-label">
@Html.LabelFor(model => model.FileType)
</div>
<div class="editor-field">
@Html.DropDownListFor(model => model.FileType.Variety, (SelectList)ViewBag.FileTypes)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.Status)
</div>
<div class="editor-field">
@Html.DropDownListFor(model => model.Status.Status, (SelectList)ViewBag.Status)
</div>
И действие моего контроллера выглядит так:
[HttpPost]
public ActionResult Create(int reviewid, ReviewedFile file)
{
if (ModelState.IsValid)
{
UpdateModel(file);
}
//repository.Add(file);
return RedirectToAction("Files", "Reviews", new { reviewid = reviewid, id = file.ReviewedFileId });
}
Все должно быть хорошо, за исключением того, что значения из выпадающих списков выставляются как нулевые. Когда я изучаю ошибки ModelState, выясняется, что причина:
Параметр преобразования из типа
'System.String' для ввода
'PeerCodeReview.Models.OutcomeStatus'
не удалось, потому что преобразователь типов не может
конвертировать между этими типами.
Это не должно быть так сложно, но это так. Итак, вопрос в том, Что мне нужно сделать, чтобы правильно связать свойства моей модели?
Кроме того, я знаю, что могу передать объект FormCollection, но это означает изменение значительных частей моих модульных тестов, которые в настоящее время ожидают строго типизированный параметр модели.