删除第一个索引元素会导致表单不发布大于1的其他索引

时间:2015-04-20 06:44:08

标签: c# jquery .net asp.net-mvc razor

首先,我想通过表格发布一个列表。它看起来像这样:

<div class="cnl-box-otr">
    <div class="form-group">
        <label>Name</label>
        @Html.TextBoxFor(m => m.list[0].name, new { @class = "form-control", placeholder = "Name" })
    </div>
    <div class="form-group">
        <label>Percentage</label>
        @Html.TextBoxFor(m => m.list[0].percentage, new { @class = "form-control", placeholder = "Percentage" })

    </div>
</div>

现在我点击按钮创建其他动态相同的div与jquery:

 $("#AddMorediv").on('click', function () {
    var index = parseInt($('#index').val());
    index = index + 1;
    var contentToBeInserted = '<div class="cnl-box-otr" id="row"><a href="#" class="cnl-box  DeleteRow"><i class="fa fa-times"></i></a><div class="form-group"><label>Details</label><input class="form-control" id="list_' + index + '_Name" name="list[' + index + '].Name" placeholder=" Name" type="text" value=""></div><div class="form-group"><label>%</label><input class="form-control" data-val="true" id="list' + index + '_Percentage" name="list[' + index + '].Percentage" placeholder="Percentage" type="text" value=""></div></div>'
    $('.writericondiv').append(contentToBeInserted);
    $('#indexwriters').val(index);
});

这将完美地创建我的列表并成功发布为列表。但问题是我还可以选择逐个删除这些div。我尝试删除第一个索引,然后发布表单。只有零索引值成功发布到控制器,但大于第一个索引不发布其值。发布时列表看起来像这样。

<div class="cnl-box-otr">
    <div class="form-group">
        <label>Name</label>
        @Html.TextBoxFor(m => m.list[0].name, new { @class = "form-control", placeholder = "Name" })
    </div>
    <div class="form-group">
        <label>Percentage</label>
        @Html.TextBoxFor(m => m.list[0].percentage, new { @class = "form-control", placeholder = "Percentage" })

    </div>
</div>
<div class="cnl-box-otr">
        <div class="form-group">
            <label>Name</label>
            @Html.TextBoxFor(m => m.list[2].name, new { @class = "form-control", placeholder = "Name" })
        </div>
        <div class="form-group">
            <label>Percentage</label>
            @Html.TextBoxFor(m => m.list[2].percentage, new { @class = "form-control", placeholder = "Percentage" })

        </div>
    </div>
希望你明白我想问的是什么。如果没有,请添加评论我肯定会改进这个问题。

感谢您提供任何帮助或建议。

1 个答案:

答案 0 :(得分:1)

是的,这就是MVC框架的功能。 实际上,无论何时将列表发布到MVC控制器,它都会查找索引的对称性,即0,1,2,3,4,5。 MVC将停止解析列表,它会在索引中找到停止。

所以你需要做的是:

  1. 删除行
  2. 遍历其余行
  3. 从0
  4. 更新每行输入的索引

    另一种解决方案: 请检查来自@ StephenMuecke的评论,其中包括thisthis解决方案。 感谢@StephenMuecke,我开始了解Index作为隐藏的输入。