ASP .NET MVC父子视图模型绑定

时间:2012-03-07 18:49:30

标签: asp.net-mvc model-view-controller knockout.js parent-child model-binding

我正在开发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 Dialog表单添加/编辑/删除AgeBrackets并更新客户端上的agebrackets列表。

问题是 - 我应该在哪里存储括号集合?

我不希望在发布整个成员表单之前向服务器发布对括号集合的任何更改。

我试图用knockout.js来完成它。这似乎是最优雅的做法。是否可以将knockout.js仅用于收集AgeBrackets并保持Member绑定到MVC模型绑定,并且在Member post期间以某种方式组合Member-fields和knockout AgeBracket collection viewmodel?

1 个答案:

答案 0 :(得分: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)

希望这有帮助。