У меня была странная проблема с очень простой моделью. При отправке обратно в контроллер модель всегда была нулевой. Не найдя проблемы, я разобрал ее, перестроил модель, добавив средство доступа за раз.
В конце концов я обнаружил, что наличие строкового метода доступа с именем «State» и использование его в представлении вызывает проблему:
<%= Html.HiddenFor(m => m.State) %>
Почему это случилось?
Вот модель:
public class StudentSelectState
{
public string State { get; set; }
public int SelectedYear { get; set; }
public IDictionary<string, string> Years { get; set; }
}
Вот контроллер:
[HttpGet]
public ActionResult SelectStudent()
{
var StudentYears = absenceServices.GetStudentYears();
var state = new StudentSelectState {Years = Lists.StudentYearListToDictionary(StudentYears)};
return View(state);
}
[HttpPost]
public ActionResult SelectStudent(StudentSelectState state)
{
var StudentYears = absenceServices.GetStudentYears();
state.Years = Lists.StudentYearListToDictionary(StudentYears);
return View(state);
}
и вот вид:
<% using (Html.BeginForm())
{%>
<%= Html.ValidationSummary() %>
<%= Html.TextBoxFor(m => m.State) %>
<%= Html.RadioButtonListFor(m => m.SelectedYear, Model.Years, "StudentYears") %>
<div style="clear: both;">
<input value="submit" />
</div>
<% } %>
RadioButtonListFor - это HtmlHelper, который я написал для заполнения списков RadioButtonList.
Я использую Ninject 2.0 для внедрения сервисов в конструктор, но я не думаю, что это имеет отношение к этой проблеме.
Я мог бы переименовать метод доступа, но мне любопытно, почему это происходит.