• ベストアンサー

Request.Params("xxx")で「+」が消える

ASP.NET(VB)で開発をしております。 親画面のjavascriptのwindow.openで子画面を開く際に、 パラメータ「?xxx=123+456」を渡しています。 子画面側のサーバ処理のRequest.Params("xxx")で パラメタを取得すると「+」が消えてしまい、 「123 456」となってしまっています。 子画面のURLにはちゃんと「?xxx=123+456」と表示されているので、 Request.Params("xxx")で取得する際に、 「+」がスペースに変換されてしまっているのだと思うのですが、 ネットで調べても同様の事象は見つけられませんでした。 これはASPのRequestクラスの仕様なのでしょうか? また対応策などご存知お方、ご教授いただけますでしょうか。 よろしくお願いします。 以下コードです。 【親画面】 window.open("./child.aspx?xxx=123+456","test",""); 【子画面 (child.aspx)】 Dim xxx As String = Request.Params("xxx") '↑xxx = "123 456"となってしまいます。

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

  • ベストアンサー
  • tkrn
  • ベストアンサー率53% (33/62)
回答No.2

> パラメタを取得すると「+」が消えてしまい、 > 「123 456」となってしまっています。 URLエンコードされていないからです。 渡すときに.NET側で"123+456"にHttpUtility.UrlEncode メソッドを噛ませて渡し、 取得するときににHttpUtility.UrlDecodeメソッドを噛ませて取得してください。 こんな感じです。 'URLを渡すとき Dim sQueryString As String = "?xxx=" & HttpUtility.UrlEncode("123+456") 'URLから取得するとき Dim sXXX As String = HttpUtility.UrlDecode(Me.Request.QueryString("xxx"))

stay_gold
質問者

お礼

教えて頂いたとおり、URLのエンコードでできました。 URLの知識不足でした。勉強しておきます。 回答ありがとうございました。

その他の回答 (1)

回答No.1

未経験です。 http://www.studyinghttp.net/uri 多分それはASPの仕様じゃなくてURIの仕様。 検証はしていませんが window.open("./child.aspx?xxx=123+456","test",""); window.open("./child.aspx?xxx=123%25456","test",""); だとどうなりますか?

stay_gold
質問者

補足

結果「123%456」でした。 URIの仕様ですか。ちょっと教えていただいたサイトを見てみます。 回答ありがとうございました。

関連するQ&A

  • Request Header の追加

    画面遷移する際に、 HttpRequestHeaderに、任意のパラメータと値を追加する ことはできますか? できれば、ASPでやりたいのですが、 ASP.NETでもOKです。

  • Requestの取り方、どちらが好ましい?

    C♯、ASP.NETでの開発です。 string test = Request["hoge"].ToString() という取り方をしている箇所があり、これだとパラメータとしてhogeが なかった時に落ちるので string test = Request.QueryString["hoge"]; にしようと思っています。 (単純に、なければ空白としたい) 取り方は違いますが、結局のところ(値があれば)同じものが 来るのでこの対応で問題ないと思っているのですが、問題ありましたら ご指摘いただけないでしょうか。

  • 親画面と子画面の制御

    いつも拝見させていただいています。 早速ですが、ASP(VB)で親画面から入力用の子画面をjavascriptのwindow.openで読んでいます。 その際、子画面をモーダル扱いもしくは親画面にアクションが与えられた場合に子画面を閉じることをしたいのですが、何かいい方法はありますでしょうか? ちなみに、window.openをshowmodalにすると、書き換えるだけではセッションが切れるなどいろいろな弊害があるようですので他の手段で探しています。 親画面へのonfocusも画面デザインがマスターページのためうまくいきません。 (自身の技術力不足かもしれませんが・・) 他にASPで入力子画面(検索して、選択された内容を親画面に反映する。この際の親のポストバックなし。)を表示する場合、どのような組み方が基本的なのでしょうか? javascriptの~で呼んで~で返して・・・など何かありましたらよろしくお願いします。

  • Request.QueryStringの型について

    Request.QueryString("testNo")で取得した値の型についてなのですが、私は文字列だと思っていました。 ところがここでわからなくなってしまったのが、 Request.QueryString("testNo")で取得した値を比較するときです。 たとえば ttp://xxxx/xxx.aspx?testNo=3 で受取ったRequest.QueryString("testNo")を比較するとします。 if Request.QueryString("testNo") = "3" then と if Request.QueryString("testNo") = 3 then ではどちらもTrueになるのですが、これはどうしてなのでしょう? どういった解釈がなされているのかが知りたいです。 もしくは、書いてあるページを教えていただけると幸いです。 今までは特に気にしてなかったのですが、文字列を数値で比較しても 大丈夫なのでしょうか? 自分の書いたところ見るとどっちのパターンでも書いてあって あやふやです。

  • ASP.NETで子画面の処理でわからなく悩んでいます。

    ASP.NETで子画面の処理でわからなく悩んでいます。 ?親画面Aでボタンを押下すると、子画面Bが表示されます。 ?子画面Bが存在しないときは、子画面Bを表示をさせて存在するときは、  子画面Bの内容をリロードをしたいと思っています。  データの受け渡しは、 Sessionでしたいと思っています。 ?ボタン押下時の処理は下記に記載しました ⇒とりあえず画面表示がされます。 ?子画面が存在するときのチェックと子画面のリロードの方法を教えてください。 よろしくお願いいたします。  ASPか javascriptか迷ったのですが ASPであげさせて頂きます。 ' Dim scriptStr As String ' scriptStr = "<script type='text/javascript'>" ' scriptStr += "window.open('webMesai.aspx','_blank');" ' scriptStr += "</script>" ' ' ClientScript.RegisterStartupScript(Me.GetType(), "詳細画面", scriptStr)

  • IFRAME内のフォームをRequestしたい

    こんばんわ。 ASPで簡単なウェブページを作っています。 あるアンケートフォームがあるHTML(親ページとします)があります、その中に一部IFRAMEでこれまた別の設問が書かれたHTML(子ページとします)が表示されているとします。 親ページのSUBMITで内容をメール送信するASPにデータを送信するとしてテストしてみますとIFRAME内の内容がRequestなどで呼べませんでした。 こういう場合、どうにかしてASPファイルにてIFRAME内の情報をRequestできる方法はないでしょうか? お手数をお掛けいたしますが宜しくお願い申し上げます。

  • リクエストパラメータの値によってJavaScriptでスタイルを変更する場合

    いつも参考にさせて頂いてます。 早速なのですが以下のことが分からず困っています。 親画面から子画面へ遷移する。 その際、チェックボックスの値を複数個POSTで送信する。 子画面で受け取った値をhiddenにそのまま保持し、 孫画面にそのままPOSTで送信する。 JSPを使っているのですがこういったことは可能なのでしょうか? ■親画面 <form method="POST" name="data2" action="child.jsp">   <input type="checkbox" id="check" name="check" value="1>   <input type="checkbox" id="check" name="check" value="2">   <input type="checkbox" id="check" name="check" value="3">   <input type="submit" value="送信"> </form> ■子画面 window.onload = function(){   //画面遷移時にリクエストパラメータをhiddenにセット   document.data.check2.value = <%= request.getParameterValues("check") %>; } ~略~ <form method="POST" name="data2" action="grandchild.jsp">   <input type="hidden" id="check2" name="check2" value="">   <input type="submit" value="送信"> </form> こんな感じで孫画面へそのまま渡せるのかな?と思ったのですが うまく行きませんでした。 アドバイスなどありましたら宜しくお願いします。

  • 親ウィンドウのフォームの値を変更

    showModalDialogでオープンした子画面から、returnValueで値を返すのとは違う方法で、親ウィンドウのフォームの値を変更したいと思っています。 (その子画面をオープンすると同時に、親ウィンドウのフォーム値を変更したいため) その際に    window.opener.document.formA.hiddenA.value = "aaa" という風に記述しているのですが、「window.opener.documentはオブジェクトではありません」というエラーになってしまいます。window.openで開いた子画面からだと、この方法でできたと思うのですが・・・どうすれば変更できるでしょうか?そもそも、showModalDialogでオープンした画面から親ウィンドウの値を変更すること自体がダメなのでしょうか? よろしくお願いします。

  • 親画面からポップアップ画面が操作できない?!

    こんにちは。お世話になります。 *やりたいこと* 親画面からポップアップ画面(子画面)を出し、子画面でボタンを押したときに 子画面からのcallbackで親画面をサブミットします。このとき子画面は閉じない。 その後親画面を閉じたとき(別のページに移ったとき)に、子画面も閉じたい。 サブミット後の親画面では子画面が認識できなくなり、親画面から子画面を 閉じることができません。 *やりたいこと*ができる方法はありませんか? ちなみに、サブミットのときに子画面を再表示しようかと考えましたが、子画面に 表示するデータが多く、リソースを使い果たしそうで実行できません。 *親画面のソース(こんなカンジにしたいです)* <HTML> <SCRIPT Language="JavaScript"> <!-- var WinSel = null; function NewOpen(){ //子画面のオープン WinSel = window.open("NewWin.asp","NewWin","width=200,height=200"); } function NCallBack(){ //子画面からのコールバック window.document.frmMain.action = "OyaWin.asp"; window.document.frmMain.target = "_top"; window.document.frmMain.submit(); } // --> </SCRIPT> <BODY><FORM name="frmMain" Method="post"> <INPUT TYPE="button" VALUE="子画面オープン" onCLick="NewOpen();"> <INPUT TYPE="button" VALUE="子画面クローズ" onCLick="WinSel.close;"> </FORM></BODY></HTML> よろしくお願いします。

  • POSTデータを取得するとき

    ASP.NETほんとの初心者です。 aspxファイルを少し変更しないといけないのですが、 わからないことがあります。 POSTデータを受け取る際、 元ソースでは、例えば Request.Form['abc'] と記述がありました。 が、それだと取得できなくて 今回は Request['abc'] で、受取れました。 これは何が違うのでしょうか? .NETのバージョンでしょうか? Request.Form['abc'] Request.Form('abc') Request['abc'] Request('abc') 上記が全て有効なのかわかりませんが、なかなか調べられず理解できません。 まったくの初心者に教えていただけないでしょうか?

専門家に質問してみよう