プロが教える店舗&オフィスのセキュリティ対策術

回答者の皆様にはいつもお世話になっています。
ASP.NET MVC3の案件で、外部からのPOST送信を受信する仕様が追加されため、アクションメソッドを実装しているのですが、うまくいきません。
さんざん問い合わせたあげく、先方の送信フォームがこのようになっていることがわかりました。

<form method="post" action="http://xxxxx/recieve">
 <input name="cbox[]" value="東京" checked="checked"/>
 <input name="cbox[]" value="大阪" checked="checked"/>
 <input name="cbox[]" value="京都"/>
</form>

phpなどではこの場合、変数cboxに配列値 {"東京","大阪"}が入るらしいのですが、ASP.NET MVCではどう受信したらいいのでしょう?

public ActionResult Recieve(List<string> cbox){
 // cboxの内容が{"東京"}(要素1個のリスト)になってしまいます
};

どなたかお助けください。ヘルプです!

A 回答 (2件)

こんにちは


言われてみればありそうなケースなので実験しましたが、このフォーマットのフォームは受信できませんね(苦笑
というか、質問のHTMLはphp専用の書き方だと思います。
CGIでも、JSPでも配列では受信できません。ASP.NET MVCだけの問題ではない。
ASP.NET MVCで、List<string>やstring[]で受信したい場合は、いずれかの書式で送信してもらってください。

<input name="cbox[0]" value="東京" checked="checked"/>
<input name="cbox[1]" value="大阪" checked="checked"/>
<input name="cbox[2]" value="京都"/>

<input name="cbox" value="東京" checked="checked"/>
<input name="cbox" value="大阪" checked="checked"/>
<input name="cbox" value="京都"/>

推奨は空白値を自動削除する後者。
ちなみに、checkedが"東京"のみの場合、phpでは(配列でなく)自動的に単数値送信なるようです。これはこれで凄いというか…流石のphp仕様
    • good
    • 0
この回答へのお礼

言語によってフォーム形式が異なるというのは困ったものですよね。
php特有の記法だと主張して先方に変更してもらいました。

<input name="cbox" value="東京" checked="checked"/>
<input name="cbox" value="大阪"/>
<input name="cbox" value="京都"/>

のような単項目の選択でも、ASP.NET MVCではList<string>できっちり取得できました。
今後はこれで行こうと思います。

お礼日時:2012/11/02 12:01

もし、相手側のHTMLがどうしても修正不可、というのであれば。



アクションメソッドの引数でデータを取ろうとせず、アクションメソッドの内部でリクエストされた値を自分で解析して取得する、という方法が取れる「かも」しれません。

引数としてうまくとれないのは標準のモデルバインダーがそのような値をうまく扱ってくれないため、と考えられるので、モデルバインダーをカスタマイズする、という方法もとれる「かも」しれません。

#どちらの方法についても未確認です。
 たぶんできるだろう、というレベルで記述しています。
    • good
    • 0
この回答へのお礼

onos様、いつもありがとうございます。
なるほど。。モデルバインダちうんですね。奥が深いです。
もっと勉強したいと思います。
あドバイスありがとうございました。

お礼日時:2012/11/02 11:54

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!