在我的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。我认为这里存在绑定问题。我认为编写自定义模型绑定器需要将每个属性转换,并且当添加新字段时,绑定器类也应该更改,因此我不想让自定义模型绑定器执行此操作。在这种情况下,有没有其他方法将数据传递给控制器?或者可以编写自定义模型绑定器,以便写入的代码更少,并且当添加新属性时,绑定器类将不需要更改?
评论后编辑:我的目标基本上是在不在控制器的操作中查询存储库/数据库的情况下,从一个视图传递一个实例到另一个视图。