Я пытаюсь создать простую форму нескольких моделей с использованием .net 4.5, Entity 5, MVC 4Несколько моделей в одной форме с использованием EditorFor
Основываясь на примерах, которые я видел, я ожидаю EditorTemplates \ Tasks.cshtml быть визуализируется дважды, один раз для каждой задачи в проекте, но он только появляется, чтобы получить один раз и передать коллекцию задач, с которыми я, похоже, не могу работать.
Любые идеи? Мои классы/представления перечислены ниже.
Задача:
public partial class Task
{
public Task()
{
this.TaskPeople = new HashSet<TaskPerson>();
}
public int Id { get; set; }
public string Title { get; set; }
public int ProjectId { get; set; }
public virtual Project Project { get; set; }
public virtual ICollection<TaskPerson> TaskPeople { get; set; }
}
Проект:
public partial class Project
{
public Project()
{
this.Tasks = new HashSet<Task>();
}
public int Id { get; set; }
public string Title { get; set; }
public virtual ICollection<Task> Tasks { get; set; }
}
HomeController.New():
public ActionResult New()
{
Project project = new Project();
project.Tasks.Add(new Task() { });
project.Tasks.Add(new Task() { });
return View(project);
}
Главная/New.cshtml:
@using (Html.BeginForm("Create", "Home", FormMethod.Post))
{
@Html.AntiForgeryToken()
@Html.ValidationSummary()
@Html.LabelFor(m => m.Title)
@Html.EditorFor(m => m.Tasks, "Tasks")
<input type="submit" value="Save" />
}
Главная/EditorTemplates/Tasks.cshtml
@model IEnumerable<MvcApplication5.Models.Task>
@Html.TextBoxFor(m => m.Title) // Error Here
EDIT:
Если я IEnumerable из Tasks.cshtml и заменить его
@model MvcApplication5.Models.Task
я получаю следующее исключение:
The model item passed into the dictionary is of type 'System.Collections.Generic.HashSet`1[MvcApplication5.Models.Task]', but this dictionary requires a model item of type 'MvcApplication5.Models.Task'.
tasks.cshtml не должны быть IEnumerable просто Задача - просто положить базовый тип и движок бритвы будут отображать список m.Tasks - это то, как шаблоны предназначены для работы. И измените имя шаблона на Task.cshtml, как оно соответствует типу.Это также обеспечит правильную индексацию идентификаторов полей формы для перехода к контроллеру. –
Rob