- - PR -
ASP.NET Buttonクリック時において
1
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-12-07 10:08
お世話になります。
ASP.NET2.0でユーザー登録画面の開発を行っています。 画面上には下記の様にコントロールが配置してあり、 ユーザーID:TextBox パスワード:TextBox ユーザ区分:DropDownList 区分1:DropDownList 区分2:DropDownList 検索:Button ButtonをClick時に同一画面上にあるTextBoxに入力されたユーザーIDを元に サーバー側のButton_Clickイベントを使用して データを検索し結果を表示するような仕組を作っています。 (TextBoxの値:結果は1:1の関係) 通常は入力された値に対し正常に結果が表示されるのですが、 同じ画面上にあるDropDownListで値を変更後に 同じ動作をすると必ず下記のエラーが発生します。 DropDownListではonChangeイベントでJavaScriptを使用して DropDownList同士の表示リストの同期を取っており、 PostBackせずにデータを取得しなおす処理が記述してあり、 どうもそのせいでエラーが発生しているようです。 ※上記のイベントを削除すると発生しませんでした。 一応、下記のエラーを参考に ページディレクティブにEnableEventValidation="false"を追加すると 上記のエラーは発生しない事は確認出来たのですが、 何かエラーが出ない対応があればそちらを採用したいと考えています。 何か情報、参考リンクなどあれば教えていただけませんでしょうか。 よろしくおねがいします。 ---エラー内容----------- 無効なポストバックまたはコールバック引数です。イベントの検証は、構成の <pages enableEventValidation="true"/>、またはページの <%@ Page EnableEventValidation="true" %> を使用して有効にされます。セキュリティの目的により、この機能は、イベントをポストバックまたはコールバックする引数が、それらを最初に表示したサーバー コントロールから発行されていることを確認します。データが有効であり、予期されている場合、検証のためのポストバックまたはコールバック データを登録するために ClientScriptManager.RegisterForEventValidation メソッドを使用してください。 | ||||||||||||
|
投稿日時: 2006-12-07 23:45
変更しているコントロールの ViewState を OFF
_________________ | ||||||||||||
|
投稿日時: 2006-12-08 01:33
| ||||||||||||
|
投稿日時: 2006-12-08 15:38
回答ありがとうございます。
「べる」さんの↓ですが、 > てことで、心配なら自前でチェックしてね、ということになります。 「最初に表示したサーバー コントロールから発行されていることを確認します。」 この文章の内容が理解できずに悩んでしまっての投稿でした… 「Jitta」さん、 >変更しているコントロールの ViewState を OFF 一応画面にあるコントロールは全ての組み合わせで On,Offを切り替えてみたけどダメでした。 お二方の回答を読むとそんなに影響無さそうなので、 「EnableEventValidation="false"」で一応開発を進めつつ もう少し情報を探してみようと思います。 | ||||||||||||
|
投稿日時: 2006-12-08 17:35
項目を追加して、それを実行すれば、意図する項目(javascriptで追加し得る項目)以外でも postできちゃいますよ、と。危険性としてはそういうことです。 javascriptで項目を追加してポストバックした場合、追加された項目は「最初に表示した サーバーコントロールから発行」されていません。EnableEventValidationはこれをチェックしています。 | ||||||||||||
|
投稿日時: 2006-12-08 19:58
「最初に表示したサーバー コントロールから発行されていることを〜」って
そういう意味だったんですね。ありがとうございます。 今回のページはweb.configで認証されたロールしか参照出来ない ディレクトリに配置してあるので大筋ではセキュリティ上も 問題ないかと思っています。 あとは細かな対策をポストバック時に 記述するようにしていけばいいって事ですね。 今までリッチクライアントばかりだったので苦労ばかりです;; web系の開発は大変ですね。。。 お世話になりました。 |
1