2008年10月15日

ASP.NET JavaScriptで別ページを開く際、値を渡すときの注意点。

 ASP.NETにて、別ページを開くにはJavascriptで「window.open」を使います。

 その際に、別ページへ値を渡したい場合には、クエリ文字列を使って値を渡す方法が楽です。

 クエリ文字列とは、以下のようなものです。
 「test.aspx?test=1」
 test=1の部分で値を渡すことになります。

 ASP.NETでこのように値を渡す場合、渡された方は単純に「Request.QueryString("test")」で値を取得することが出来ます。
 ただし、この場合は全てASP.NETである場合です。

 JavaScriptなどで記述し、値を渡すとき、単に上記のように記述して、ASP.NETのページで「Request.QueryString("test")」で取得しようとしても、文字化けするかまったく取得できないのです。

 それは。。。。。

>>>


>>>
 何故文字化けするのかと言うと、文字のエンコードが原因です。

 ASP.NETでは通常、UTF-8エンコードされたページが出力されています。ASP.NETに渡すクエリ文字列も、UTF-8エンコードされている必要があるということです。
 通常のhtmlでは、文字列はシフトjisです。
 つまり、ここでエンコードの違いが発生するのです。
 シフトJISで渡されたデータを、ASP.NETではUTF-8と勘違いするのです。そのため文字化けなどが発生します。

 ASP.NET自体をシフトJISにする方法もありますが、ここはやはりコーディングで解決してみましょう。

<例>
Dim script As String
script = "window.open('Calendar.aspx?test=" & Server.UrlEncode("1") & "');"

 「別窓へ値を渡す場合、渡したいデータ自体をエンコードしてやる」と言う方法です。
 Server.UrlEnodeでエンコードした結果を渡してやることで、渡されたページでは、「Request.QueryString("test")」で取得することが可能となります。

 この点に注意さえすれば、受け側としてはコーディングが楽になりますので、私としては良い方法かと思います。



posted by Debring at 12:14 | Comment(0) | TrackBack(0) | ASP.NET ページ遷移
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:


この記事へのトラックバック
×

この広告は180日以上新しい記事の投稿がないブログに表示されております。