在我的MVC应用程序,我有一个从视图传递数据到控制器的问题。我有相当复杂的域类:将复杂的对象从视图传递到控制器/视图在ASP.NET 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自带空,即使我通过非空实例的视图。我想我在这里有一个有约束力的问题。我认为,编写自定义模型联编程序需要转换每个属性,并且在添加新字段时还应该更改联编程序类,因此我不希望自定义模型联编程序执行此操作。在这种情况下是否有其他方式将数据传递给控制器?或者可以编写自定义模型联编程序,以便编写更少的代码,并且在添加新的特性时,联编程序类将不需要更改?
编辑之后的评论:我想实现的基本上是将一个实例从一个视图传递到另一个视图,而无需在控制器的操作中查询repository/db。
@arh,当你传递对象时,你为什么不想回到db?我个人更喜欢这种方法,因为它可以保持一切。我只能通过身份证。 Lot的流量也较少。 – griegs 2009-12-20 23:49:59