В моем приложении MVC у меня проблема с передачей данных из представления в контроллер. У меня довольно сложные доменные классы:
public class TaskBase : PersistableObject
{
public virtual TaskCategory Category { get; set; }
public virtual IList<TaskNote> Notes { get; set; }
public virtual string TaskTitle { get; set; }
public virtual string TaskBody { get; set; }
public virtual DateTime? CreationTime { get; set; }
public virtual User CreatedBy { get; set; }
public virtual int CompletionRatio { get; set; }
}
public class MainTask : TaskBase
{
public virtual IList<TaskBase> ChildTasks { get; set; }
public virtual User AssignedTo { get; set; }
public virtual IList<TaskHistory> History { get; set; }
}
public class TaskFormModel : ViewDomainBase
{
public MainTask Task { get; set; }
public LoginForm LoginInfo { get; set; }
}
И, на мой взгляд, я хочу передать экземпляр TaskFormModel в контроллер.
<%= Html.ActionLink<TaskController>("Edit Task", (x) => x.Edit(new TaskFormModel() { Task = item, LoginInfo = Model.LoginInfo }))%>
А вот действие контроллера:
public ActionResult Edit (TaskFormModel taskInfo)
{
return View(ViewPageName.TaskDetailsForm, task.Task);
}
В этом методе действия taskInfo имеет значение null, даже если я пропускаю ненулевой экземпляр из поля зрения. Я думаю, что у меня есть проблема обязательности здесь. Я думаю, что для написания связывателя пользовательской модели требуется преобразовать каждое свойство, а также, когда добавляются новые поля, также следует изменить класс связывателя, поэтому я не хочу, чтобы связыватель пользовательской модели делал это. Есть ли другой способ передачи данных в контроллер в этом сценарии? Или можно связать пользовательский связыватель модели так, чтобы меньше написанного кода, а также при добавлении новых свойств, класс связывателя не нуждался в изменении?
Редактировать после комментариев: я пытаюсь в основном передать экземпляр из одного представления в другое, не запрашивая репозиторий / db в действии моего контроллера.