- PR -

Request.QueryStringについて C#

1
投稿者投稿内容
Liquid_Force
大ベテラン
会議室デビュー日: 2003/08/28
投稿数: 102
投稿日時: 2008-06-30 15:14
こんにちは。

画面遷移時にどのボタンが押下されたかをボタンイベントより先のPage_Load内で
判断する為、ボタンをHTMLコントロールで配置し、Javascriptで
actionにQueryStringを指定しています。

これをサーバーサイド処理の最後(ボタンイベントの最後)で
クリアしたいのですが、「指定されたCollectionは読み取り専用です」という
エラーが発生してQueryStringがクリアできず困っています。

どなたかご教示下さい、宜しくお願いします。
どっとねっとふぁん
ぬし
会議室デビュー日: 2005/02/23
投稿数: 935
投稿日時: 2008-06-30 15:29
QueryStringをクリアしてどうしたいんでしょう。
たとえクリアできたとしても、ブラウザからはQueryStringが付いた状態でリクエストがあがっています。
ブラウザのほうにQueryStringを消してくれ、なんていってやることはWebの仕組みからできませんが。。。

#まぁ、だから変更できないよう読み取り専用にもしてるんでしょうが。

まずはブラウザとサーバの処理の関係をよく考えてみたほうがいいかと思います。
rain
ぬし
会議室デビュー日: 2006/10/19
投稿数: 549
投稿日時: 2008-06-30 15:46
自分で試す時間がないのでだめだったらすみませんが、

・PageにHiddenFieldを置いておく
・ボタンを押したときに、JavaScriptでHiddenFieldに値を仕込む(その後、ポストバック)
・Page_Loadで、HiddenFieldに仕込んだ値を使う

でどうでしょう?
どっとねっとふぁん
ぬし
会議室デビュー日: 2005/02/23
投稿数: 935
投稿日時: 2008-06-30 16:23
ああ、単にどのボタンが押されたかを知りたいだけなら、Request.Formの中身を
細かくチェックすれば普通にボタンを使ってても確認できるはずですよ。
たしかボタンに表示している文字列がFormの中にふくまれるんじゃなかったかな。


Liquid_Force
大ベテラン
会議室デビュー日: 2003/08/28
投稿数: 102
投稿日時: 2008-06-30 16:27
どっとねっとふぁんさん、rainさん回答ありがとうございます!

◆どっとねっとふぁんさん
ポストバック時に画面の値がクリアされるのと同じように
てっきり前回のクエリーストリングもクリアされていると思っていました。
が、よく考えたらラウンドトリップして帰ってきてブラウザーのレンダリングが
完了してないうちにクリアしようとするのがそもそもおかしいですね。
ボケてました・・・orz

◆rainさん
今のやり方がダメならご指摘と同じ内容で対応しようと考えていました。
コメントありがとう御座いました。
どっとねっとふぁん
ぬし
会議室デビュー日: 2005/02/23
投稿数: 935
投稿日時: 2008-06-30 16:38
記述のミスかもしれないけど、なんか細かいとこが間違ってるような。。。

> ポストバック時に画面の値がクリアされるのと同じように

標準のコントロールやHTMLサーバコントロールではポストバックしたときにも
ViewStateで値を保持するので、クリアされることはありません。

> よく考えたらラウンドトリップして帰ってきてブラウザーのレンダリングが
> 完了してないうちに

ボタンのイベント処理をしている間だったら、まだサーバ上で処理している間ですね。
ブラウザに帰ってきてもないし、レンダリングなんてまだまだはじまっていないはず。。。
Liquid_Force
大ベテラン
会議室デビュー日: 2003/08/28
投稿数: 102
投稿日時: 2008-06-30 18:00
その通りです。
すみません、疑わしい記述のしかたをしてしまって。
ご指摘ありがとう御座います。
1

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