- - PR -
TextBoxのReadonlyをtrueにするとPostBackでTextBoxの値が消えてしまう
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2006-04-11 16:07
初心者ですがよろしくお願いします。
ASP.NET2.0でWebフォームでPostBackされた時、 サーバーコントロールのTextBoxのReadOnly属性をTrueにしていると 値が消えてしまいます。 具体的には、Readonly=trueなサーバーコントロールのTextBoxに、 JavaScriptで値を変更し、PostBackすると変更した値を取得できません。 検索キーや日付など、サブウインドウで候補を表示し、 候補からユーザーに選択させ、TextBoxに値を放り込む仕組みを提供していました。 VisualStudio2003で作ったものはできていたのですが、 VisualStudio2005で同じ事をしようとすると値を取得できなくなりました。 TextBoxのReadonlyをfalseにして、AttributesでReadonlyにtrue属性を追加すれば いちおできることは確認できたのですが、書いてて混乱してしまいそうです。 こういう仕様なのでしょうか? なにか良い案がありましたらご教授願います。 | ||||
|
投稿日時: 2006-04-11 17:42
ここまで確認したのであれば、直接聞いてみると良いです。 MSDN フォーラムでフィードバックしてみてください。 そのためには、まず検証結果をまとめる必要があります。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||
|
投稿日時: 2006-04-11 19:05
受け付けないのが、仕様みたいですね。
TextBox.ReadOnly プロパティ _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||
|
投稿日時: 2006-04-11 19:16
アドバイスありがとうございます。
こんなことを言うと失礼に当たるかもですが、 正直、Attributesで書いた場合どうしてできるのか わかっていないレベルのくせにこちらに質問させていただきました。 (一番活発そうだったので) 検証結果をまとめるというのは例えばどんなことをすればよいでしょうか? 最初の投稿の感じで良いのでしょうか? よろしければアドバイスをいただけると助かります。 | ||||
|
投稿日時: 2006-04-11 19:29
返信投稿中にスレッドが進んでいて前後してすいませんでした。
調べていただいてありがとうございます。 参照先は一度見ていたのですが、読んだ感じではできないのかな と思ってました。 しかしながら、 バージョン情報 .NET Framework サポート対象 : 2.0、1.1、1.0 となっていたので、2003でできてたのになんで2005だとできないのだろう と疑問に思っていました。 [ メッセージ編集済み 編集者: 206 編集日時 2006-04-11 19:31 ] | ||||
|
投稿日時: 2006-04-11 22:12
KB で読んだような気がしたので、検索してみました。KB じゃなく、リファレンスでした。
セキュリティ上の措置ですね。ReadOnly なのだから、クライアントからポストされる値が、サーバから送り出した値と違っているのはおかしい、と。 サーバに送信されるとあるので、リクエストクエリを直接読めば、書いてあるのかもしれません。 ん?Server.Transfer すれば本当に処理する URL は隠れるし、CSRF 対策にもなる? まぁ、ViewState から復元した後、ポスト内容を反映するので(ここで ReadOnly なら、反映しないようにしているのでしょう)、ViewState を変更されていたらアウトなのですが。 〆 written by Jitta@わんくま同盟 on 2006/04/11 □ Microsoft MVP for Visual Developer ASP/ASP.NET October, 2005 - September, 2006 | ||||
|
投稿日時: 2006-04-12 10:26
ありがとうございます。 TextBox.Readonlyのプロパティは変わってないけど、サーバでの処理が変わり 本来のReadOnlyの意味合いどおりになったという感じでしょうか 「リクエストクエリを直接読めば」とアドバイスを頂いたのでやってみたところ 取得できました。 私のやった回避方法をあげときます。 ========================================= 【1】AttributesでReadOnly ・サーバーコントロールのReadOnlyはfalse ・AttributesでReadOnlyを追加 JavaScriptで変更したTextBox1の値をTextBox1.Textで取得できます。 【2】教えていただいたリクエストクエリ ・サーバーコントロールのReadOnlyはtrue TextBox1.Textで取得できないので、Request.Form.Item("TextBox1").ToStringで取得 =========================================== 他にも方法がないか探してみます。 ありがとうございます。 |
1