我能想到的最好的公众例子是亚马逊购物车。如果您有一个页面显示多个不同的记录,可以更新多个不同的字段。
我不能将每个记录放在一个表单标记中,因为用户可能会修改多个记录然后提交。
我不能只更新我收到的所有记录,因为:
1.表现
2.审计
3.如果有人在查看页面时更改了用户“未更改”的记录,则用户提交的更改将被覆盖。
那么如何最好地处理数据,然后获取更改的记录?
这是清楚的吗?
答案 0 :(得分:3)
使用绑定!不要在您的操作中迭代表单集合。
Steve Sanderson写了一篇关于如何做的blog post。我写了blog post关于如何使用MvcContrib。FluentHtml。这两篇文章都非常详细,包括可下载的代码。答案 1 :(得分:1)
在转发器中生成表单,并将ID附加到表单元素,该表单元素随每个新表单递增。将重复的表单元素的数量保存在隐藏字段中。然后在您的控制器中,读取此隐藏字段的值 - 这将是要读取的表单数量。然后,在循环中,通过指定字段的名称以及附加到名称的循环索引作为键来检索每个表单的字段。
您可以使用一些javascript逻辑来检测表单值的变化,并在该表单的部分中更新隐藏字段(如果发生);或者您可以使用每个表单部分隐藏隐藏字段中的原始值(尽管我不建议这样做,因为太多字段/表单会使页面膨胀)。
答案 2 :(得分:1)
一种(但不一定是最好的)方法是在js变量中存储哪些项目或在客户端更改时存储哪些项目,然后仅发送数据实际上与用户收到的不同。
正如Erik所说,你可以使用隐藏的表单元素来确保它在没有js的情况下工作。