【ASP.NET MVC】外部からのフォーム受信がうまくいかない

このQ&Aのポイント
  • ASP.NET MVC3の案件で、外部からのPOST送信を受信する仕様が追加されたため、アクションメソッドを実装しています。しかし、うまくいきません。具体的には、送信フォームの内容を受信する際、配列値の受け取り方に問題があります。phpでは変数cboxに配列値が入るのですが、ASP.NET MVCではどのように受信すれば良いのか分かりません。
  • この問題について、質問させていただきます。ヘルプをお願いします。
  • どなたか、ASP.NET MVCで外部からのフォーム受信をうまく処理できる方法をご存知の方はいらっしゃいますか?お助けください。
回答を見る
  • ベストアンサー

【ASP.NET MVC】フォーム受信

回答者の皆様にはいつもお世話になっています。 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個のリスト)になってしまいます }; どなたかお助けください。ヘルプです!

質問者が選んだベストアンサー

  • ベストアンサー
  • shockatz
  • ベストアンサー率80% (153/191)
回答No.1

こんにちは 言われてみればありそうなケースなので実験しましたが、このフォーマットのフォームは受信できませんね(苦笑 というか、質問の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仕様

nayutax
質問者

お礼

言語によってフォーム形式が異なるというのは困ったものですよね。 php特有の記法だと主張して先方に変更してもらいました。 <input name="cbox" value="東京" checked="checked"/> <input name="cbox" value="大阪"/> <input name="cbox" value="京都"/> のような単項目の選択でも、ASP.NET MVCではList<string>できっちり取得できました。 今後はこれで行こうと思います。

その他の回答 (1)

  • onos
  • ベストアンサー率81% (127/155)
回答No.2

もし、相手側のHTMLがどうしても修正不可、というのであれば。 アクションメソッドの引数でデータを取ろうとせず、アクションメソッドの内部でリクエストされた値を自分で解析して取得する、という方法が取れる「かも」しれません。 引数としてうまくとれないのは標準のモデルバインダーがそのような値をうまく扱ってくれないため、と考えられるので、モデルバインダーをカスタマイズする、という方法もとれる「かも」しれません。 #どちらの方法についても未確認です。  たぶんできるだろう、というレベルで記述しています。

nayutax
質問者

お礼

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

関連するQ&A

  • 同一ページの複数のフォーム通信

    お世話になります。 <form method='POST' action='#1'> <input name='text1'> <input name='text2'> <form method='POST' action='#2'> <input name='text3'> <input method='submit' value='B'> </form> <input method='submit' value='A'> </form> Aにて text1,2,3を#1へ送信 Bにて text3を#2へ送信 したいのですが、上手くできません。 <form></form>で囲まれている中に 更に<form></form>する事はできないのでしょうか? 代替案はありますか?? よろしくお願いします。

  • [VBScript]ラジオボタンでform送信

    HTML内でVBScriptを用いて、以下のようなことをしたいと思っています。 <tr>   <td nowrap align="center">東京 or 大阪 </td>   <td><input type="radio" name="ikisaki" value="0" checked>東京 <input type="radio" name="ikisaki" value="1" >大阪 </td> <form method="post" action="xxxx.asp" name="form"> <tr>  <td nowrap align="right">市名</td>  <td nowrap><font size="+2"><%=strCitNm%></font></td> </tr> <tr>  <td>   <input type="submit" name="A1" value="送信">  </td> </tr> 上記なようなラジオボタンが2つあったとして、[送信]を押したときに ラジオボタンのチェックが「東京」なら action="tokyo.asp" に、 「大阪」なら action="oosaka.asp"へform送信を行いたいと思っているのですが、 HTML内でVBScriptを使用する場合、どのような記述にすればいいのかがわかりません。 どうかよろしくお願いします。

    • ベストアンサー
    • HTML
  • PHPでフォームからの送信

    PHPでフォームからデータを送信する方法について教えてください。例えばPHPファイルの中に下の様にフォームを作成して、送信ボタンを2つ作ります。一つのボタンをクリックすると全てのフォームの情報が送信されてしまいますが、独立して送信できるようにはできないのでしょうか。簡単にでもできるかできないかを教えていただけましたら、あとは自分でなんとかがんばりますので、どなたか教えていただけれますと幸いです。宜しくお願いします。 <form action="abc.php" method="post"> AAA:<input type="text" name="simei"> BBB:<input type="password" name="pass"> <input type="submit" value="送信"> </form> <form action="abc.php" method="post"> CCC:<input type="text" name="simei"> DDD:<input type="text" name="pass"> <input type="submit" value="送信"> </form>

    • ベストアンサー
    • PHP
  • フォームPOST後「戻る」時のチェック値の取得

    フォームでPOSTをしたあと、history.backや戻るボタンで戻ったときに、POST時に選択したラジオボタンのcheckedもfalseになってしまうのですが、チェックされているものを取得することはできるのでしょうか。 ■form部分 <form name="form1" method="post" action="..."> <input type="radio" name="radio1" value="1">1<br /> <input type="radio" name="radio1" value="2">2<br /> <input type="radio" name="radio1" value="3">3<br /> </form> ■JavaScript部分 var radio1 = document.form1.radio; for(var i=0;i<radio1.length;i++) { if (radio1[i].checked) { alert(i); } } このようなコードで、選択してPOST後、「戻る」で入力ページ表示時にJavaScriptを実行しても、 radio1[i].checkedは全てfalseになってしまいます。 また選択→POST→戻る→そのままPOSTとすると、選択したvalue値は正しくサーバーに送られます。 「戻る」でのページ表示時に選択したものを取得する方法があれば教示いただけますか。

  • phpでのメールフォームの作成について

    HTMLで <form action="mail.php" method="post"> <input name="aaa" type="checkbox" id="aaa" value="AAA" checked> <input name="bbb" type="checkbox" id="bbb" value="BBB" checked> <input name="ccc" type="checkbox" id="ccc" value="CCC" checked> </form> として、次に進むボタンを押すとmail.phpに飛び mail.phpでは、チェックされたものだけを表示したいのですが、どうすればよいでしょうか? もし、AAAとBBBが選ばれたら あなたが選んだのは AAA、BBBです。 と表示したいです。そのあとにメールフォームを続けるつもりです。 ご教授よろしくお願いします。

    • 締切済み
    • PHP
  • chromeでフォームの値が取得できない

    PHPでフォームに入力された値を取得して画面に表示させる処理において、 Javascriptでフォームの値を変更した場合、chromeだと変更後の値が 取得できません。 例えば、 <form name="form" method="post" action="index.php"> <input type="checkbox" name="chk1" value="111"> <input type="hidden" name="data1" value="AAA"> <input type="submit" value="送信"> </form> というようなフォームがあったとして、Javascriptで値を <form name="form" method="post" action="index.php"> <input type="checkbox" name="chk1" value="222"> <input type="hidden" name="data1" value="BBB"> <input type="submit" value="送信"> </form> と、変更しても送信ボタンを押して取得できる値は、上の方の値になります。 IEやFireFoxでは問題なく変更後の値が取得できるのですが、chromeだと 取得できません。 なにか解決方法があるのか、それともchromeの仕様なのかご教示いただければと 思います。 どうかよろしくお願いいたします。

  • 送信先CGIの選択

    <form method="post" action="file.cgi"> <input type="hidden" name="password" value="xxx"> <input type="hidden" name="action" value="zzz"> <input type="text" name="name" size="50" value=""> </form> この場合、送信先CGIがfile.cgiに固定されていますが、action="送信先"をリストボックス等を使って複数選択できるようにしたいと考えています。可能でしょうか?

    • ベストアンサー
    • Perl
  • 画面の更新無しでフォームデータを送信する

    送信した値は外部ファイルに書き込むため、ページの更新は避けたいのですが、何か方法はありませんでしょうか? 送信完了のチェックとかも必要ないです。 <form name="my_form" method="post" action="./index.php"> <input type="text" name="count" value="1"><br /> <input type="submit" value="送信" /> </form>

    • 締切済み
    • PHP
  • <FORM> </FORM> の中に さらに <FORM> </FORM>があるときのSUBMITボタンについて

    今、 <FORM ACTION="aaa.asp" METHOD="POST" Name="form1"> <input type="SUBMIT" value="ボタン1"> <FORM ACTION="bbb.asp" METHOD="POST" Name="form2"> <input type="SUBMIT" value="ボタン2"> </FORM> </FORM> としていて、ボタン2を押すとbbb.aspに 飛んでほしいのでに、aaa.aspに飛んでしまいます。 こういう場合どのようにすればよいのでしょうか? それぞれのボタンは hidden の値をそれぞれの フォームの中の値を渡したいので どうしてもSubmitがいいのです。

    • ベストアンサー
    • HTML
  • foamを自動送信したい。

    自動送信といいますか、ある任意の時間で送信し続ける方法ないでしょうか? ただのhttp://www~~ですとJavaScriptのonload="setTimeout('NextPage()',10000)"でいいのですが、foamの場合はどうなるのでしょうか? <FORM action=http://~~ method=post target="top"><INPUT type=hidden value=1 name=au> <INPUT type=hidden value=5506 name=bc> こんなかんじでactionとvalueも送信しなきゃなりません。 また、このようなfoamが複数あるときどのように設定すればいいでしょうか? 教えてください、よろしくお願いします。

専門家に質問してみよう