13

データバインドされたコントロールでイベント (追加/編集/削除) が発生すると、次のエラーが発生します。

ポストバックまたはコールバック引数が無効です。イベントの検証は、設定で使用するか、ページで <%@ Page EnableEventValidation="true" %> を使用して有効にします。セキュリティ上の目的で、この機能は、ポストバック イベントまたはコールバック イベントへの引数が、それらを最初にレンダリングしたサーバー コントロールから発信されていることを確認します。データが有効で期待される場合は、ClientScriptManager.RegisterForEventValidation メソッドを使用して、検証のためにポストバックまたはコールバック データを登録します。

カスタム DataList コントロールを使用していますが、この問題は GridView、DetailsView、FormView、および Repeater コントロール (および他のデータバインド コントロール) でも発生します。

私が見つけることができる答えは、構成ファイルまたはページで検証をオフにするように教えてくれますが、それが最善の解決策であるようには思えません。私は何を間違っていますか?

4

3 に答える 3

24

問題は、ページLoa​​dイベントでコントロールのデータをロードし、DataBind()メソッドを呼び出すことです。ただし、イベントが発生する前にDataBind()メソッドが呼び出された場合、コントロールの名前が変更されたため、上記の例外が生成されるようです。

解決策は、これをif(!IsPostback)DataBind()に変更してから、イベントハンドラーの最後でDataBind()メソッドを呼び出すことです。変更に影響を与えるには、ハンドラーの最後でとにかくほとんどの場合それを呼び出す必要があります。

これが問題ではなく、JavaScriptを使用してコントロールのクライアント側を変更している場合は、この記事を確認してください。

この問題に対するブログで多くの回答を得ていたので、これは自己回答の投稿であり、さらに共有する可能性があると考えました。

于 2008-11-16T08:54:30.273 に答える
7

これありがとう。私はこの問題に直面しており、あなたの自己回答が解決に役立ちました。

すべてのイベント ハンドラーの最後で DataBind() メソッドを呼び出す代わりに、ページの PreRender イベントで 1 回呼び出します。

于 2009-06-25T18:36:21.453 に答える
3

同じ問題が発生していて、問題を解決するのに数時間かかりました. ロバートの回答は部分的に私を助け、ポストバックの有無に関係なくリピーターをデータバインドしたにもかかわらず、問題は解決しませんでした。多くの調査の後、UseSubmitBehavior="false"、ビンゴを設定することを提案する投稿に出くわし、問題を解決しました。うまくいけば、これは役に立ちます。

于 2013-08-16T12:23:20.517 に答える