我在将模型绑定到MVC中的列表时遇到问题.我的页面具有动态添加和删除文本框的功能.我的页面
HTML将是
<form id="prdt"> <div id="div_0"> <input type="text" name="products[0].Name" value="Coffee"/><button id="0" onclick="return DeleteLocation(this.id)">Delete</button></div> <div id="div_1"> <input type="text" name="products[1].Name" value="Tea" /><button id="1" onclick="return DeleteLocation(this.id)">Delete</button></div> <div id="div_2"> <input type="text" name="products[2].Name" value="Cola" /><button id="2" onclick="return DeleteLocation(this.id)">Delete</button></div> <div id="div_3"> <input type="text" name="products[3].Name" value="Pepsi" /><button id="3" onclick="return DeleteLocation(this.id)">Delete</button></div> </form>
<script type="text/javascript"> function DeleteLocation(id) { $("#div_" + id).remove(); } </script>
但是当我删除“可乐”文本框并做一个ajax帖子时,我的列表中只有咖啡和茶(Controller Action Post).即列表中省略了最后一个
解决方法
可以通过添加名为products.Index的特殊字段来完成,其中包含下一个索引的值.您需要为每个新索引重复此操作:
<form id="prdt"> <div id="div_0"> <input type="hidden" name="products.Index" value="0" /> <input type="text" name="products[0].Name" value="Coffee"/> <button id="0" onclick="return DeleteLocation(this.id)">Delete</button> </div> <div id="div_1"> <input type="hidden" name="products.Index" value="1" /> <input type="text" name="products[1].Name" value="Tea" /> <button id="1" onclick="return DeleteLocation(this.id)">Delete</button> </div> <div id="div_2"> <input type="hidden" name="products.Index" value="2" /> <input type="text" name="products[2].Name" value="Cola" /> <button id="2" onclick="return DeleteLocation(this.id)">Delete</button> </div> <div id="div_3"> <input type="hidden" name="products.Index" value="3" /> <input type="text" name="products[3].Name" value="Pepsi" /> <button id="3" onclick="return DeleteLocation(this.id)">Delete</button> </div> </form>
您可以在this article,“非顺序指数”部分找到更多信息