2012-03-13 46 views
2

我使用ASP.NET 4,MVC3,EF 4.3(代碼優先)和淘汰JS。我目前正在爲更復雜的模型之一創建和編輯表單。它有各種各樣的領域,以及相關對象的多個集合(多對多)。我將爲編輯場景提出我的問題,因爲這是兩者中較難的。任何方式在標準mvc表單文章中包含knockoutjs可觀察值?

我希望用戶能夠編輯模型中的所有字段,我已將其放入視圖模型中。爲了顯示和添加額外的技能(多對多集合中的一個),我決定使用knockoutjs來獲得很好的效果,這很好地顯示了集合的序列化初始對象,並允許我添加更多。

我的問題是如何通過將其發送回控制器來保存這個相當複雜的模型。由於許多字段可以很好地用標準HTML助手在視圖中表示,所以我想避免多個AJAX帖子或將每個字段綁定到ko.observable(數組)。我真正想要的只是採用多對多集合,將它們綁定到ko.observablearrays,並以某種方式將它們作爲標準強類型mvc視圖表單文章的一部分發回。

這甚至可能嗎?如果是這樣,我將如何處理它?我非常感謝任何幫助,迄今爲止我的研究沒有產生有用的結果。如果這有助於更好地描述問題,我願意發佈代碼小竅門。

編輯:

namespace MyProjectModels 
{ 
    [NotMapped] 
    public class JobSkillViewModel 
    { 
     public int SkillID { get; set; } 
     public int LevelID { get; set; } 

     public string SkillName { get; set; } 
     public string LevelDescription { get; set; } 
    } 
} 
+0

請提供您正在使用的模型的示例 – sll 2012-03-13 15:03:01

+0

我最近做了一個非常類似的事情(不是使用knockout),而是將數據作爲JSON發送到控制器,該控制器能夠將它綁定到服務器。我們使用newtonsoft json.net進行序列化和反序列化。不知道這是否有幫助! – Magrangs 2012-03-13 15:09:33

+0

爲基本viewmodel和viewmodel的集合添加了模型。 – glockman 2012-03-13 15:28:54

回答

2

我不建議做這種方式,但如果你覺得你必須:按要求

namespace MyProject.Models 
{ 
    [NotMapped] 
    public class JobViewModel 
    { 
     public int JobID { get; set; } 
     [Required] 
     public string Title { get; set; } 
     [Required] 
     public string Description { get; set; } 
     [Display(Name = "Start Date")] 
     [DataType(DataType.Date)] 
     public DateTime StartDate { get; set; } 
     [Display(Name = "End Date")] 
     [DataType(DataType.Date)] 
     public DateTime EndDate { get; set; } 

     // Foreign Keys 
     [Display(Name = "Hiring Manager")] 
     [Required] 
     public string HiringManagerID { get; set; } 
     [Display(Name = "Assigned User")] 
     public string AssignedUserID { get; set; } 


     //Collections for many-to-many properties 
     public List<JobSkillViewModel> JobSkills { get; set; } 
    } 
} 

,並在收集握着我的視圖模型爲編輯表單視圖模型樣本與形式發佈。爲什麼不簡單地將集合作爲JSON序列化爲隱藏的表單字段。

<input name="something" type="hidden" data-bind="text: collectionToJson" /> 

你collectionToJson方法將調用ko.toJSON或映射當量,那麼你就必須處理自己的反序列化服務器端。

我不認爲你正在尋找一個很好的乾淨的方式,通過表格模型綁定。如果我是你,我會將整個表單綁定到一個json模型,並將一個完整的格式化的json對象發回給自動模型綁定。由此產生的代碼在服務器端將是更清潔恕我直言。

希望這會有所幫助。

+0

你當然是對的,沒有一個很好,乾淨的方式來回傳一個表單和模型綁定。這絕對是一種方法,但是,謝謝。 – glockman 2012-03-26 19:24:44