- PR -

ASP.NET Buttonクリック時において

1
投稿者投稿内容
momosute
会議室デビュー日: 2003/07/19
投稿数: 17
投稿日時: 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 メソッドを使用してください。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2006-12-07 23:45
変更しているコントロールの ViewState を OFF

_________________
べる
ぬし
会議室デビュー日: 2003/09/20
投稿数: 1093
投稿日時: 2006-12-08 01:33
引用:
一応、下記のエラーを参考に
ページディレクティブにEnableEventValidation="false"を追加すると
上記のエラーは発生しない事は確認出来たのですが、

それでいいんじゃないですか?何か問題ありました?

引用:
セキュリティの目的により、この機能は、イベントをポストバックまたはコールバックする引数が、それらを最初に表示したサーバー コントロールから発行されていることを確認します。

てことで、心配なら自前でチェックしてね、ということになります。

引用:
変更しているコントロールの ViewState を OFF

これだとエラーでちゃいました。
momosute
会議室デビュー日: 2003/07/19
投稿数: 17
投稿日時: 2006-12-08 15:38
回答ありがとうございます。

「べる」さんの↓ですが、
> てことで、心配なら自前でチェックしてね、ということになります。
「最初に表示したサーバー コントロールから発行されていることを確認します。」
この文章の内容が理解できずに悩んでしまっての投稿でした…

「Jitta」さん、
>変更しているコントロールの ViewState を OFF
一応画面にあるコントロールは全ての組み合わせで
On,Offを切り替えてみたけどダメでした。

お二方の回答を読むとそんなに影響無さそうなので、
「EnableEventValidation="false"」で一応開発を進めつつ
もう少し情報を探してみようと思います。
べる
ぬし
会議室デビュー日: 2003/09/20
投稿数: 1093
投稿日時: 2006-12-08 17:35
引用:
「べる」さんの↓ですが、
> てことで、心配なら自前でチェックしてね、ということになります。
「最初に表示したサーバー コントロールから発行されていることを確認します。」
この文章の内容が理解できずに悩んでしまっての投稿でした…

ドロップダウンの例でいうと、例えばブラウザを見ている人がHTMLソースを開いて、勝手に
項目を追加して、それを実行すれば、意図する項目(javascriptで追加し得る項目)以外でも
postできちゃいますよ、と。危険性としてはそういうことです。

javascriptで項目を追加してポストバックした場合、追加された項目は「最初に表示した
サーバーコントロールから発行」されていません。EnableEventValidationはこれをチェックしています。
momosute
会議室デビュー日: 2003/07/19
投稿数: 17
投稿日時: 2006-12-08 19:58
「最初に表示したサーバー コントロールから発行されていることを〜」って
そういう意味だったんですね。ありがとうございます。

今回のページはweb.configで認証されたロールしか参照出来ない
ディレクトリに配置してあるので大筋ではセキュリティ上も
問題ないかと思っています。

あとは細かな対策をポストバック時に
記述するようにしていけばいいって事ですね。
今までリッチクライアントばかりだったので苦労ばかりです;;
web系の開発は大変ですね。。。

お世話になりました。
1

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