在我的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