MVC 3 - 为子对象渲染其他编辑器模板

Jim*_*mmy 4 asp.net-mvc jquery

我试图创建一个表单,允许用户与0多个孩子创建一个实体对象,主要对象是一个Lead具有0一对多BeneficiaryPayer对象.三者之间的关系如下:

Lead has many Beneficiaries (one to many)
Lead has many Payers (many to many) joined through LeadsPayers
Run Code Online (Sandbox Code Playgroud)

在我的主要视图模型的编辑器中,我有一个循环,为每个受益人和付款人生成编辑器,但我希望能够有一个按钮,动态地将另一个受益人或付款人添加到主管并使用编辑器模板,所以我的javascript代码中没有重复的html.

我有这个工作将所有内容绑定到Lead我的表单发布到控制器时我只是不知道如何重用编辑器模板代码来生成与我当前表单兼容的html,有没有人以前做过这个?必须有一种比呈现html的ajax按钮更好的方法

Jim*_*mmy 5

这有助于我走上正轨,但并不完全是我想要做的事情,因为这在MVC中似乎不容易支持,这是我的工作,以便在控制器中使用模型绑定.

我的目标

要动态地将子对象添加到具有正确html的表单,以便在传递给控件方法时它们将自动绑定到父表单,这意味着我需要像这样的HTML

<input name='Lead_Beneficiaries_1__{Property}' id=... />
Run Code Online (Sandbox Code Playgroud)

而不是这样(这是博客文章的结果)

<input name='Beneficiary__{Property}' />
Run Code Online (Sandbox Code Playgroud)

当发布到控制器时,它不会自动绑定到父级.

我没有使用Ajax从控制器渲染编辑器模板html,而是在加载表单时自动渲染一个编辑器模板,然后根据用户的需要加载更多.JQuery代码

$("#addBeneficiary").click(function(e) {
    e.preventDefault();
    var beneficiary = $(".beneficiary:last").clone();
    var count = parseInt(beneficiary.find("input:first").attr("id").match(/\d+/), 10);
    beneficiary.find("input").each(function(indx, element) { 
        var name = $(element).attr('name').replace(count, count+1),
            id   = $(element).attr('id').replace(count, count+1);
        $(element).attr('name', name);
        $(element).attr('id', id);
        $(element).val(''); 
    });
    $("#beneficiaries").append(beneficiary);
});
Run Code Online (Sandbox Code Playgroud)

我刚刚完成我的编辑模板,在一个div,因此它可以容易地抓住作为一个整体,从jQuery的,克隆它,清空的输入值,并增加每个元件的对,所以当贴我让孩子实体的集合在我的父无需在方法中显式捕获它们或从formcollection字典中提取它们.

虽然这可能不是最好的解决方案,但它可以按照我的预期方式完成工作,并且我最终没有为编辑器模板复制HTML.此外,如果表单错误,因为父对象具有多个子项,它们将由我的表单代码自动呈现,并且由于客户端添加而不会丢失任何内容.