- PR -

ASP.NET1.1でNameが同じフォームの値を取得する方法について

1
投稿者投稿内容
Hilda
常連さん
会議室デビュー日: 2006/02/12
投稿数: 37
投稿日時: 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を取得する。
なども検討しています。

---------------------------------------------
かるあ
ぬし
会議室デビュー日: 2003/11/16
投稿数: 1190
お住まい・勤務地: センガワ→ムサシノ
投稿日時: 2007-05-10 17:11
引用:

Hildaさんの書き込み (2007-05-10 16:24) より:
※"value"に","を使用しないという方法は、内部の都合でできません。
※チェックボックスの数は常に変動する(ポストバック時には削除されている)ため
WebControlは使用していません。


内部の都合上できないなら外側 ",,,," を別の何かに変換してあげればいいのではないでしょうか。

でもまぁ
引用:

- Nameを一意にする。(FormName0 〜 FormName100 など連番を振る)
↑いまのところ再有力候補です。


こっちでやるのが素直でいいんじゃないですか?

# Name って使ったことないな
_________________
かるあ のメモスニペット
Hilda
常連さん
会議室デビュー日: 2006/02/12
投稿数: 37
投稿日時: 2007-05-10 17:23
>かるあ さん

返答いただきありがとうございます。

>内部の都合上できないなら外側 ",,,," を別の何かに変換してあげればいいのではないでしょうか。

→変換後、再度",,,,"に戻さないといけない(DBでの検索条件のようなものとして使用するので)のですが、
現状使用不可能文字がないので、「Valueにこの文字が来たら","に戻す」も難しいのです。。。

>こっちでやるのが素直でいいんじゃないですか?

やっぱりそうですか。ありがとうございます。

#あ、漢字間違ってました。すみません〜
再有力候補

最有力候補
べる
ぬし
会議室デビュー日: 2003/09/20
投稿数: 1093
投稿日時: 2007-05-10 23:15
引用:
- Nameを一意にする。(FormName0 〜 FormName100 など連番を振る)

簡単にこの仕様にできるならこっちがいいと私も思いますが、

引用:
- HTTPヘッダーをASP.NETで覗き見て、自力でvalueを取得する。


コード:
System.IO.StreamReader reader = new System.IO.StreamReader(Request.InputStream);
TextBox6.Text = reader.ReadToEnd();

などとして生のPOSTデータを見れば(文字列解析は面倒ですが)分けて取得できます。
渋木宏明(ひどり)
ぬし
会議室デビュー日: 2004/01/14
投稿数: 1155
お住まい・勤務地: 東京
投稿日時: 2007-05-11 08:27
引用:

という情報をポストするとRequest.Form[ "FormName" ]で参照すると、Request.FormがNameValueCollection
なので、valueのカンマ区切りで取得でき、



んなアホな。

Colletion で取れてるなら foreach で回せばいいだけでは?
todo
ぬし
会議室デビュー日: 2003/07/23
投稿数: 682
投稿日時: 2007-05-11 10:20
http://support.microsoft.com/kb/312558/ja
Hilda
常連さん
会議室デビュー日: 2006/02/12
投稿数: 37
投稿日時: 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

スキルアップ/キャリアアップ(JOB@IT)