2012-11-13 22 views
2

我有一個表格,它使用大量的表單域(HTML多樣性 - 即沒有runat = server)。發生回發時,這些對象填充Requests.Form對象,並且它們按照它們在頁面HTML中定義的順序插入。ASP.Net:是否定義了Request.Form元素的順序?

此行爲是否記錄在一起並跨瀏覽器一致?我希望能夠通過索引來訪問這些元素,因爲它們可能會在客戶端被插入或刪除,這將提供一種簡單的方法來查找字段。

編輯:

表中的每一行具有包含行ID的隱藏字段。該字段根據它在呈現時顯示的順序進行命名。例如第一行有一個像<input type="hidden" name="row0" value="RowID_555252" />的字段,依此類推。

當然,只要在表格中間插入或刪除一行,行號就會出錯,所以我唯一能想到的解決方案是使用Javascript更新整個表的行號行左右移動。然後,通過掃描Request.Form for row0,row1等,直到元素爲NULL,後端纔會按順序檢索行。

+0

我不會這樣做,例如,複選框不發佈任何東西,如果他們[沒有打勾](http://stackoverflow.com/questions/1809494/post-the-checkboxes-that-are-未選中)和禁用的字段不回發等。 – StuartLC

回答

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解析器有一個奇怪的怪癖,大部分類型的輸入元素放置在表格內,但不在表格單元格內,通過稱爲寄養父母的過程從表格中彈出,但輸入元素類型爲「隱藏」的元素不會以這種方式彈出發生這種情況是因爲這是保持瀏覽器的傳統提交訂購行爲的唯一方法。)

...並且跨瀏覽器一致?

提交內容的整個算法絕對不一致 - 例如,由於單擊「圖像」類型的輸入元素而導致的提交已知會顯着變化。

我相信提交的元素的順序在瀏覽器實現中可能是一致的。但是,我不會依賴它,並鼓勵您找到更強大的解決方案。

1

這種行爲記錄和跨瀏覽器是否一致?

不,它沒有記錄,並且不保證在瀏覽器中保持一致。這就是它發生的情況恰好是您使用的瀏覽器的實現細節。

你當然可以使用索引,但你不能認爲這將對應於形式元素的順序。此外,它很脆弱 - 如果在表單的開頭添加一個新字段會發生什麼?你的邏輯徹底崩潰了。

+0

我希望後端報告字段的視覺順序是什麼。如果用戶在表單的開頭插入一個表格行,我希望在回發後知道這一點。至少我需要一種方法來保存表格,以便稍後以與用戶提交的順序相同的順序進行檢索。 – Trent

+0

@Trent - 您需要爲此創建自己的機制。但是你真的應該考慮把UI與你的後端代碼緊密結合起來。也許考慮爲每一行添加排序順序字段? – Oded

相關問題