- - PR -
ASP.NET1.1でNameが同じフォームの値を取得する方法について
1
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2007-05-10 16:24
Nameが同じフォームの値を取得する方法について教えていただけますでしょうか。
現在フォームデータに"Nameが同じ" で "value" にカンマが含まれる場合の動作について 困っていることがあります。 良い方法を存知のかたがいらっしゃいましたら、ご教授ねがえますでしょうか。 よろしくおねがいいたします。 HTML内のPOSTするフォーム --------------------------------------------- <FORM .... > <input type="checkbox" name="FormName" value="AAAA"> <input type="checkbox" name="FormName" value="BBBB"> <input type="checkbox" name="FormName" value="CCCC"> <input type="checkbox" name="FormName" value="DDDD"> <input type="checkbox" name="FormName" value="EEEE"> <input type="checkbox" name="FormName" value="FFFF"> <input type="checkbox" name="FormName" value="GGGG"> </FORM> --------------------------------------------- という情報をポストするとRequest.Form[ "FormName" ]で参照すると、Request.FormがNameValueCollection なので、valueのカンマ区切りで取得でき、それぞれのvalueを以下のように値を取得しています。 --------------------------------------------- string delimStr = ","; char [] delimiter = delimStr.ToCharArray(); if( Request.Form[ "FormName" ] != null ) { string[] Select = Request.Form[ "FormName" ].Split( delimiter ); } -------------------------------------------- この取得方法ですと、以下のように"value"にカンマが入っていた場合valueの値が取得できません。 <input type="checkbox" name="FormName" value=",,,,,"> ※"value"に","を使用しないという方法は、内部の都合でできません。 ※チェックボックスの数は常に変動する(ポストバック時には削除されている)ため WebControlは使用していません。 質問--------------- "name"が同じフォームでも、(上記の方法以外で)簡単に取得する方法があれば教えていただけますでしょうか。 そのほかの対応案としては、 - Nameを一意にする。(FormName0 〜 FormName100 など連番を振る) ↑いまのところ再有力候補です。 - HTTPヘッダーをASP.NETで覗き見て、自力でvalueを取得する。 なども検討しています。 --------------------------------------------- | ||||||||||||
|
投稿日時: 2007-05-10 17:11
内部の都合上できないなら外側 ",,,," を別の何かに変換してあげればいいのではないでしょうか。 でもまぁ
こっちでやるのが素直でいいんじゃないですか? # Name って使ったことないな _________________ かるあ のメモ と スニペット | ||||||||||||
|
投稿日時: 2007-05-10 17:23
>かるあ さん
返答いただきありがとうございます。 >内部の都合上できないなら外側 ",,,," を別の何かに変換してあげればいいのではないでしょうか。 →変換後、再度",,,,"に戻さないといけない(DBでの検索条件のようなものとして使用するので)のですが、 現状使用不可能文字がないので、「Valueにこの文字が来たら","に戻す」も難しいのです。。。 >こっちでやるのが素直でいいんじゃないですか? やっぱりそうですか。ありがとうございます。 #あ、漢字間違ってました。すみません〜 再有力候補 ↓ 最有力候補 | ||||||||||||
|
投稿日時: 2007-05-10 23:15
| ||||||||||||
|
投稿日時: 2007-05-11 08:27
んなアホな。 Colletion で取れてるなら foreach で回せばいいだけでは? | ||||||||||||
|
投稿日時: 2007-05-11 10:20
http://support.microsoft.com/kb/312558/ja
| ||||||||||||
|
投稿日時: 2007-05-18 17:55
大変返信が送れて申し訳ありませんでした。
結果報告させていただきます。 結局、「FormのNameを一意にする」という対策で解決いたしました。 みなさま、ご返信をいただきありがとうございました。 >べる様 返信いただきありがとうございます。 Request.InputStream で生データを読むことができるんですね! #実は生ヘッダの読み方をちゃんと調べていませんでした。 今後の参考にさせていただきます。 ありがとうございました。 >渋木宏明(ひどり)様 返信いただきありがとうございます。 todo様が返信くださったURLにもありますが、Nameが同じFormはカンマ区切りで取得してしまうようです。 以下、MSのサイトより引用。 >HTML (Hypertext Markup Lanugage) フォームには、同じ名前を共有する複数の入力フィールドが含まれている場合があります。Request.Form または Request.QueryString コレクションを使用してフィールド名にアクセスすると、指定したフィールド名を持つすべてのフィールドから、すべての値がコンマ (,) 区切りの文字列として返されます。 >todo様 返信いただきありがとうございます。 tempArray = Request.Form.GetValues("fieldName") で取得できたんですね。MSサイトの調査不足でした。 (今回はNameを一意に変更する対処を行いましたが、 教えていただいた方法が一番修正少なく、今回最もやりたかったことです。) ありがとうございました。 [ メッセージ編集済み 編集者: Hilda 編集日時 2007-05-18 17:56 ] |
1