INFO: Request.Form と Request.QueryString による HTML Input 要素の配列の処理


概要


HTML (Hypertext Markup Lanugage) フォームには、同じ名前を共有する複数の入力フィールドが含まれている場合があります。 Request.Form または Request.QueryString コレクションを使用してフィールド名にアクセスすると、指定したフィールド名を持つすべてのフィールドから、すべての値がコンマ (,) 区切りの文字列として返されます。

個々の値にアクセスするには、GetValues メソッドを使用して文字列の配列を取得します。 その後、この配列の要素を使用して個々の値にアクセスできます。 たとえば Microsoft Visual C# .NET では、次のようなコードを使用します。
String[] tempArray;
tempArray = Request.Form.GetValues("fieldName");
Response.Write (tempArray[0]); //Print the first value.
Microsoft Visual Basic .NET では、次のコードを使用します。
Dim tempArray() as String
tempArray = Request.Form.GetValues("fieldName")
Response.Write (tempArray(0)) 'Print the first value.

詳細情報


最も一般的な例として、HTML フィールド名が何度も繰り返されているとします。 例:
  <form ... >
<input type="text" name="fieldName" ... >
<input type="text" name="fieldName" ... >
...
<input type="submit" ... >
</form>
上記のような場合をサポートするには、Request.Form および Request.QueryString コレクションに、各フィールド名に対応する文字列値の配列を保持する必要があります。 Request.FormRequest.QueryString は文字列のコレクションです。

この事例は多くのユーザーにとって一般的でないため、Request.Form ["変数名"] または Request.QueryString ["変数名"] のデフォルトの動作では、単一の文字列が返されるようになっています。 このため、複数値のフィールドを使用しなければならない場合は、Request.Form.GetValues メソッドを使用する必要があります。

従来の ASP との比較

この問題を解決するために、従来の Microsoft Active Server Pages (ASP) と Microsoft Visual Basic Scripting Edition (VBScript) は、OLE オートメーションのデフォルト プロパティに依存しています。 Request.Form および Request.QueryString からの参照時には、常に文字列の OLEAUT コレクションが返されます。 また、これらのコレクションには文字列型のデフォルト プロパティが設定され、割り当て時に自動的に逆参照されます。 これは VBScript では問題なく動作しますが、従来の ASP では、Microsoft Visual C++ でインターフェイスを使用することがきわめて困難です。

ASP.NET や Visual Basic .NET では、LET と SET に違いがなく、デフォルト プロパティの自動解決が行われないため、この方法は使用できません。

関連情報


ASP.NET の機能の関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。

305140 情報: ASP.NET ロードマップ