我有一个用户可以添加条目的表格,一旦用户完成,他们就可以添加另一个条目。
添加条目后,可以再次删除。这就是问题发生的地方。这是一个例子
ACTION:
Public ActionResult Submit(List<String> Names)
{
//DO STUFF
}
当他们添加一个条目时,它将获取上一个条目的索引并为其添加一个隐藏字段,所以最后它看起来像这样:
HTML:
<input type="hidden" name='Names[0]' value='John'/>
<input type='hidden' name='Names[1]' value='Peter' />
<input type='hidden' name='Names[2] value='David' />
当我提交此内容时,它会正确映射所有名称。问题是用户可以在提交之前添加其中一个名称。如果他们使用值'Peter'删除输入,则html将如下所示
删除后的HTML:
<input type="hidden" name='Names[0]' value='John'/>
<input type='hidden' name='Names[2] value='David' />
当提交此内容时,只会输入值为“John”的输入。
有没有人知道如何解决这个问题而不编写将重做html中所有索引的jquery函数?我正在寻找一种解决方案,我可以为绑定,覆盖或其他东西添加服务器端。我不想用jquery做这个的原因是因为我有多个页面具有这样的功能,而且为每个页面执行它将非常耗费时间。
的 的 ** * ** 修改的 * ** * ***
上面的代码只是一个例子,我尝试绑定的模型之一如下所示:
public class Product {
public string Code {get;set;}
public string Name {get;set;}
public int Quantity {get;set;}
public decimal Price {get;set;}
}
然后显然在我的行动中
public ActionResult Submit(List<namespace.Product> Products)
{
//do stuff
}
答案 0 :(得分:1)
您可以尝试使用Ajax jQuery更新模型,这可能会更容易。
您可以添加如下输入按钮:
<input type="button" value="Save/Update" id="saveUpdate" />
//Other HtmlCode
//Now script code
<script>
$(function(){
$("#saveUpdate").click(function({
$.ajax({
url: '/myController/GetDataForInvoiceNumber',
type: 'POST',
data: JSON.stringify(requestData),
dataType: 'json',
contentType: 'application/json; charset=utf-8',
error: function (xhr) {
alert('Error: ' + xhr.statusText);
},
success: function (result) {
CheckIfInvoiceFound(result);
},
async: true,
processData: false
});
});
});
</script>
//Contoller
Public ActionResult Submit(Products requestData)
{
//DO STUFF
}
这可能有效
答案 1 :(得分:0)
您不需要索引来向控制器提交列表。
Public ActionResult Submit(string[] Names)
{
//DO STUFF
}
然后只需将Names[]
更改为Names
,即使您删除了项目,它仍会映射到Names
参数。
<input type="hidden" name='Names' value='John'/>
<input type='hidden' name='Names` values='David' />
答案 2 :(得分:0)
我相信你很久以前就已经知道了这一点,但看起来你有一个错字。您的示例是第二行使用“值”而不是“值” values ='David'/&gt;
答案 3 :(得分:0)
感谢Zabavsky的评论,我找到了我正在寻找的解决方案。
我使用了非顺序索引。
以下是一个例子:
动作:
public ActionResult Create(List<namespace.Product> Products)
{
//do stuff
}
型号:
public class Product {
public string Code {get;set;}
public string Name {get;set;}
public int Quantity {get;set;}
public decimal Price {get;set;}
}
在我的表单中,html将如下所示:
<input type='hidden' name='Products.Index' value='1'/>
<input type='hidden' name='Products[1].Code' value='xyz' />
<input type='hidden' name='Products[1].Name' value='Shirt' />
<input type='hidden' name='Products[1].Quantity' value='5'/>
<input type='hidden' name='Products[1].Price' value='50'/>
<input type='hidden' name='Products.Index' value='7'/>
<input type='hidden' name='Products[7].Code' value='zxy' />
<input type='hidden' name='Products[7].Name' value='Pants' />
<input type='hidden' name='Products[7].Quantity' value='8'/>
<input type='hidden' name='Products[7].Price' value='70'/>
<input type='hidden' name='Products.Index' value='foo'/>
<input type='hidden' name='Products[foo].Code' value='1234' />
<input type='hidden' name='Products[foo].Name' value='Shoes' />
<input type='hidden' name='Products[foo].Quantity' value='2'/>
<input type='hidden' name='Products[foo].Price' value='100'/>
所有这些都将正确绑定。我必须补充的是:
<input type='hidden' name='Products.Index' value='1'/>
所有索引值只需要是唯一的就可以使用,所以只需几行jquery就可以实现这一点。
可在此处找到更多信息:Model Binding To A List