0

我開發MVC應用程序,我已經在我的模型以下類:ASP .NET MVC親子視圖模型結合

public class Member 
{ 
    [Required] 
    public string Name {get;set;} 
    public virtual ICollection AgeBrackets{ get;set;} 
} 

public class AgeBracket 
{ 
    [Required] 
    public int MinAge {get;set;} 

    [Required] 
    public int MaxAge {get;set;} 

    public virtual Member Member {get;set;} 
} 

在創建成員/編輯觀點我想有樣父子視圖:用於成員的公共編輯字段(名稱)和用於收集與成員關聯的AgeBrackets的部分視圖。我希望能夠使用jQueryUI對話框添加/編輯/刪除AgeBrackets,並更新客戶端上的年齡段列表。

問題是 - 我應該在哪裏存儲括號集合?

我不想發佈任何更改括號收集到服務器,直到整個成員表單發佈。

我試圖用knockout.js來完成它。這似乎是最優雅的做法。是否有可能使用knockout.js僅用於收集AgeBrackets並將成員綁定到MVC模型綁定,並且在成員發佈期間以某種方式組合成員字段和淘汰AgeBracket集合viewmodel?

+0

是否有可能在會員控制器中有公共ActionResult Create(成員成員,IEnumerable ageBrackets)? where IEnumerable ageBrackets會是knockout.js viewModel和會員 - 常規MVC模型綁定 – Alex 2012-03-07 18:57:50

回答

1

當使用KO時,我發現使用純json作爲動作方法的輸入和輸出非常容易。

如果客戶端模型儘可能接近服務器端,它會使事情變得更容易。您如何填充此模型取決於您(手動編碼,使用映射插件映射等)。假設你的客戶端模型所會員貌似

var memberViewModel = function() { 
    this.name = ko.observable("Alex"); 
    this.ageBrackets = ko.observableArray([ 
     { minAge: 15, maxAge: 20 }, 
     { minAge: 18, maxAge: 21 }, 
    ]); 
}; 

那麼你的操作方法可以

public JsonResult Create(Member member) { 
    .... 
} 

當你點擊創建按鈕,您的一個功能火,你memberViewModel轉換成JSON將被公佈返回並自動映射到您的會員模型。

要轉換爲JSON,如果最初使用映射插件,則可以使用ko.toJSON(memberViewModel)ko.mapping.toJSON(memberViewModel)

希望這會有所幫助。