我有一个使用大量表单字段的表(HTML种类 - 即没有runat = server)。当发生回发时,它们会填充Requests.Form对象,并且它们的插入顺序与它们在页面HTML中定义的顺序相同。
这种行为是否记录在一起并在浏览器中保持一致我希望能够通过索引访问元素,这将提供一种查找字段的简单方法,因为它们可以在客户端插入或删除。
修改
表中的每一行都有一个包含行ID的隐藏字段。此字段根据在渲染时显示的顺序命名。例如第一行有一个类似<input type="hidden" name="row0" value="RowID_555252" />
的字段,依此类推。
当然,只要在表格中间插入或删除行,行号就会出错,因此我能想到的唯一解决方案是使用Javascript更新整个表格的行号。行走动。然后,后端将通过扫描row0,row1等的Request.Form来按顺序检索行,直到元素为NULL。
答案 0 :(得分:1)
这种行为是否在各浏览器中记录并保持一致?
不,它没有记录,并且不保证在浏览器之间保持一致。这就是它发生的原因恰好是您使用过的浏览器的实现细节。
您当然可以使用索引,但不能假设这将与表单元素的顺序相对应。此外,它很脆弱 - 如果你在表单的开头添加一个新字段会发生什么?你的逻辑彻底破裂了。
答案 1 :(得分:1)
是否记录了这种行为......
是的。
整体算法位于http://dev.w3.org/html5/spec/constraints.html#concept-form-submit,这定义它使用http://dev.w3.org/html5/spec/constraints.html#constructing-the-form-data-set处使用算法构建的form data set
。
虽然该算法非常复杂,但实质上它表示表单元素将被放入节点顺序中的表单数据集中。这与它们在页面HTML中的内容并不完全相同,例如,可以通过JavaScript移动元素。
还有其他算法可以将表单数据集转换为查询字符串或HTTP内容,但这些也保留了节点顺序。
已知有依赖此订单的网页。 (HTML5解析器有一个奇怪的怪癖,大多数类型的输入元素,放在表格内但不在表格单元格中的输入元素通过一个称为“养父”的过程从表中弹出,但“隐藏”类型的输入元素不会以这种方式弹出这是因为这是保留浏览器的遗留提交排序行为的唯一方法。)
...并且跨浏览器一致吗?
提交内容的整个算法肯定不一致 - 例如,已知通过单击“图像”类型的输入元素而产生的提交会有很大差异。
我相信提交的元素的顺序在浏览器实现中可能是一致的。但是,我不会依赖它,并鼓励您找到更强大的解决方案。