Я борюсь с моим приложением MVC 5.Я пытаюсь создать форму, основанную на моей модели.
Модель довольно проста, и для этого я полностью уменьшил ее до голой
Survey.cs имеет только 1 свойство
public Dictionary<Answer, AnswerTemplate> QuestionAndAnswerTemplates { get; set; }
У Answer.cs есть только 1 свойство
public string AnswerValue {get;set;}
У AnswerTemplate.cs есть 2 свойства
public string ConstraintsCsv { get; set; }
public IEnumerable<SelectListItem> ConstraintsFroDropDownList
{
get
{
var result = new List<SelectListItem>();
var split = ConstraintsCsv?.Split(',');
foreach (var s in split)
{
result.Add(new SelectListItem() { Text = s });
}
return result;
}
}
И, наконец, CSHTML (просмотр)
@model Survey
@using (Html.BeginForm())
{
foreach (var item in Model.QuestionAndAnswerTemplates)
{
@Html.DisplayFor(a => item.Key.Question)<br />
@Html.DropDownListFor(a => item.Key.AnswerValue, item.Value.ConstraintsFroDropDownList)
<br /><br />
}
<input type="submit" value="Save" />
}
Dictionary
заполнен 2 элементами, и поэтому я вижу 2 DropDownLists
на отображаемом HTML в браузере.Отлично!
Проблема в том, что когда я проверяю исходный код отрендеренного HTML, я получаю следующее
<select id="item_Key_AnswerValue" name="item.Key.AnswerValue">
<option>1</option>
<option>2</option>
<option>3</option>
</select> <br /><br />
<select id="item_Key_AnswerValue" name="item.Key.AnswerValue">
<option>Yes</option>
<option>No</option>
</select> <br /><br />
Как видите, каждый ID
такой же, какэто name
Почему это?Я хотел бы иметь возможность нажать кнопку Сохранить и получить полностью заполненную модель.
Контроллер
[HttpPost]
public ActionResult Survey(Survey model)
{
return View();//need to do something here
}
Но, model
всегда не заполнен (пустые значения).
Что я делаю не так?