【发布时间】:2010-12-28 13:44:07
【问题描述】:
在我的 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 也会为空。我想我在这里有一个绑定问题。我认为,编写自定义模型绑定器需要转换每个属性,并且当添加新字段时,绑定器类也应该更改,所以我不希望自定义模型绑定器这样做。在这种情况下,还有其他方法可以将数据传递给控制器吗?或者可以对自定义模型绑定器进行编码,以便编写更少的代码并且在添加新属性时不需要更改绑定器类?
评论后编辑:我想要实现的基本上是将实例从一个视图传递到另一个视图,而不在我的控制器操作中查询存储库/数据库。
【问题讨论】:
-
@arh,为什么在传递对象时不想回到数据库?我个人更喜欢这种方法,因为它可以让所有东西分开。我只会传递ID。流量也少了很多。