Я основал свою работу на статье Фила Хаака: http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx
Я также просмотрел несколько постов здесь на StackOverflow и не могу получить от них ответ на мою проблему.Тем не менее, они, вероятно, представляют решение.Я предполагаю, что мне нужно разбить биты немного больше.
Я пытаюсь заставить привязку модели работать для представления, Модель которого является сложным типом, где одно из свойств является списком другого сложного типа.Вот мои объекты:
public class Data
{
public Data()
{
Assessments = new List<AssessmentItem>();
}
public String Associate { get; set; }
public String Department { get; set; }
public String JobTitle { get; set; }
public int StartPeriod { get; set; }
public int EndPeriod { get; set; }
public List<AssessmentItem> Assessments { get; set; }
}
public class AssessmentItem
{
public long Index { get; set; }
public String Heading { get; set; }
public String Comments { get; set; }
}
Я пытался использовать шаблонное решение EditorFor +, представленное в статье Хаака.Вот мое представление Index (обратите внимание, что оно строго типизировано для одного объекта, а не для List).
Вот метод контроллера, который принимает сообщение (хотя, я не думаю, что это будет иметь значение дляначальная генерация представления):
[HttpPost]
public ActionResult Index(Data data)
{
return View(data);
}
Как видите, на этом этапе он не работает.Это просто отображает данные, которые были опубликованы.
Вот шаблон редактора в папке Shared / EditorTemplates.
(file name: AssessmentItem.ascx location:
Views/Shared/EditorTemplates)
<%@ Control Language="C#"
Inherits="System.Web.Mvc.ViewUserControl<Project.Models.AssessmentItem>" %>
<%@ Import Namespace="Project.Models" %>
Assessment Item Heading: <%= Model.Heading %>
<%= Html.HiddenFor(model => Model.Heading) %>
<%= Html.HiddenFor(model => Model.Index) %>
<%= Html.TextBoxFor(model => model.Comments) %>
<%= Html.ValidationMessageFor(model => model.Comments) %>
Моя путаница заключается в том, что я не уверен, как указать индекс для каждого элемента AssessmentItem.Статья и код Haack включают несколько методов расширений HtmlHelper, которые я также включил в свой собственный код, но это не решило проблему.
Вот код вызова моего представления (раньше он использовал Html.RenderPartial в цикле, но я не мог понять, как привязать его обратно к части модели Model.Assessments в модели):
<% for (int i = 0; i < Model.Assessments.Count; i++) { %>
Entering Loop
<% Html.EditorFor(m => m.Assessments[i] ); %>
<% } %>
Признаюсь, у меня здесь довольно большой пробел в знаниях.Я только что разбил поверхность с ASP.NET MVC 1, прежде чем пытаться ASP.NET MVC 2, хотя улучшения кажутся оправданными.
Одна вещь, которая очень странная, это то, что я не могу использоватьсинтаксис <%:%>.В любое время я получаю несколько ошибок во время компиляции.Я могу использовать типичные <%%> & <% =%>, хотя.Я застрял здесь, поэтому любые комментарии будут оценены.Код не выдает никаких ошибок.Страница загружается так, как будто ничего не было брошено.Это просто элементы управления, которые должны быть сгенерированы с помощью оператора Html.EditorFor.Текст «Цикл ввода» печатается дважды, поэтому я знаю, что в моем списке есть объекты AssessmentItem.
Спасибо за любую помощь.