包含项目的MVC模型 - 附加 - 看起来不错,但它不存在

时间:2015-11-11 12:15:06

标签: asp.net-mvc model-binding

拉开我的声音。

我有一个模型,其中包含一个项目列表。这是"成本"

在它的编辑视图中,我使用for循环通过编辑器模板显示项目。

我添加了一个附加新链接的链接,确保生成的ID和名称跟随其他人。 即 ID = Costs_N__PropertyName 名称=成本[N] .PropertyName

该链接调用一个动作,该动作返回sam EditorTemplate但具有客户名称&如上所述。将按预期显示一个新的空行,我可以对其进行编辑。 但是,当我尝试保存时,我可以看到它没有绑定到模型。

我无法相信这让我如此悲伤,我想象这是一个普遍的地方。

我猜我错过了一些明显但我看不见的东西......

简而言之,它似乎都在工作,但附加项目不会受到主要模型成本列表的约束。 请帮助....下面的代码。

编辑视图部分

<div class="form-group">
    <div class="col-md-6 col-lg-offset-1">
        <table id="tblCosts" class="table">
            <thead>
                <tr>
                    <th>@Html.DisplayNameFor(model => model.Costs[0].ValidFrom)</th>
                    <th>@Html.DisplayNameFor(model => model.Costs[0].ValidTo)</th>
                    <th>@Html.DisplayNameFor(model => model.Costs[0].InternalCost)</th>
                </tr>
            </thead>
            <tbody id="editorRows">

                @{
                    for (int i = 0; i < Model.Costs.Count; i++)
                    {
                        @Html.EditorFor(m => Model.Costs[i]);
                    }

                }
            </tbody>
        </table>
    </div>
</div>

JQuery调用动作添加新行......

$("#addItem").click(function () {      
    $.ajax({
        url: this.href,
        cache: false,
        success: function (html) {
            alert(html);                
             $("#editorRows").append(html);
        }
});

添加新

的行动
public PartialViewResult BlankCostRow( int tmpId )
{
    var itemModel = new ECodeLevel2CostViewModel();
    itemModel.Id = tmpId;          
    return this.PartialView("~/Views/Shared/EditorTemplates/ECodeLevel2CostViewModel.cshtml", itemModel);    
} 

编辑模板......

@if (Model.Id >= 0)
{
    <tr>
        <td>
            @Html.HiddenFor(model => model.UniqueId)
            @Html.HiddenFor(model => model.Id)
            @Html.EditorFor(model => model.ValidFrom)
        </td>
        <td>
            @Html.EditorFor(model => model.ValidTo)
        </td>
        <td>
            @Html.EditorFor(model => model.InternalCost)
        </td>
    </tr>
}
else
{      
    Layout = "";
    string prefix = "Costs";
    string idPreifx = String.Format("{0}_{1}__", prefix, -Model.Id);
    string namePreifx = String.Format("{0}[{1}].", prefix, -Model.Id);

    <tr>
        <td>
            @Html.Hidden(@namePreifx + "UniqueId", Model.UniqueId, new { name = @namePreifx + "UniqueId" })
            @Html.Hidden(@namePreifx + "Id", Model.Id, new { name = @namePreifx + "Id" })
            @Html.TextBox(@namePreifx + "ValidFrom", Model.ValidFrom, new { name = @namePreifx + "ValidFrom" })
        </td>
        <td>
            @Html.TextBox(@namePreifx + "ValidTo", Model.ValidTo, new { name = @namePreifx + "ValidTo" })
        </td>
        <td>
            @Html.TextBox(@namePreifx + "InternalCost", Model.InternalCost, new { name = @namePreifx + "InternalCost" })
        </td>
    </tr>
}

0 个答案:

没有答案