2

多数のフォームフィールドを使用するテーブルがあります(HTMLの種類-つまりrunat = serverなし)。ポストバックが発生すると、これらはRequests.Formオブジェクトに入力され、ページHTMLで定義されているのと同じ順序で挿入されているように見えます。

この動作は文書化されており、ブラウザ間で一貫していますか?インデックスで要素にアクセスできるようにしたいと思います。これにより、クライアント側でフィールドが挿入または削除される可能性があるため、フィールドを簡単に見つけることができます。

編集:

テーブルの各行には、行IDを含む非表示のフィールドがあります。このフィールドには、レンダリング時に表示された順序に従って名前が付けられます。たとえば、最初の行には、などのフィールドがあります<input type="hidden" name="row0" value="RowID_555252" />

もちろん、テーブルの中央に行が挿入または削除されるとすぐに行番号が間違っているので、私が考えることができる唯一の解決策は、行が移動するたびにJavascriptを使用してテーブル全体の行番号を更新することです。次に、バックエンドは、要素がNULLになるまで、Request.Formでrow0、row1などをスキャンすることにより、行を順番に取得します。

4

2 に答える 2

1

この動作は文書化されており、ブラウザ間で一貫していますか?

いいえ、文書化されておらず、ブラウザ間での一貫性が保証されていません。これがどのように発生するかは、使用したブラウザの実装の詳細です。

もちろんインデックスを使用することもできますが、これがフォーム要素の順序に対応するとは限りません。さらに、それは脆弱です-フォームの先頭に新しいフィールドを追加するとどうなりますか?あなたの論理は完全に壊れています。

于 2012-11-13T15:26:41.940 に答える
1

この動作は文書化されていますか...

はい、そうです。

全体的なアルゴリズムはここにあります:http://dev.w3.org/html5/spec/constraints.html#concept-form-submitこれは、 http://dev.w3.orgform data setのアルゴリズムを使用して構築されたものを使用することを定義します/html5/spec/constraints.html#constructing-the-form-data-set

そのアルゴリズムは非常に複雑ですが、本質的には、フォーム要素がノードの順序でフォームデータセットに配置されることを示しています。これは、ページHTMLにあるものとはまったく同じではありません。たとえば、要素はJavaScriptで移動できます。

フォームデータセットをクエリ文字列またはHTTPコンテンツに変換するアルゴリズムは他にもありますが、これらもノードの順序を保持します。

この順序に依存するWebページがあることが知られています。(HTML5パーサーには、テーブル内に配置されているがテーブルセル内には配置されていないほとんどのタイプの入力要素が、里親と呼ばれるプロセスによってテーブルから排出されるという奇妙な癖がありますが、「非表示」タイプの入力要素はこの方法では排出されません。 。これは、ブラウザの従来の送信順序の動作を維持する唯一の方法であるために発生します。)

...そしてブラウザ間で一貫性がありますか?

送信されるもののアルゴリズム全体は完全に一貫していません。たとえば、「画像」タイプの入力要素をクリックした結果の送信は大幅に異なることが知られています。

送信された要素の順序は、ブラウザーの実装全体で一貫している可能性があると思います。ただし、そうなるとは限りません。より堅牢なソリューションを見つけることをお勧めします。

于 2012-11-13T17:57:18.863 に答える