5

動的に追加されたボタンがあるページがあります。ページが完全に読み込まれる前にボタンをクリックすると、従来の例外がスローされます。

Invalid postback or callback argument. 
Event validation is enabled using in configuration or in a page. For

セキュリティ上の理由から、この機能は、ポストバックまたはコールバックイベントへの引数が、それらを最初にレンダリングしたサーバーコントロールから発生していることを確認します。データが有効で期待される場合は、ClientScriptManager.RegisterForEventValidationメソッドを使用して、検証のためにポストバックまたはコールバックデータを登録します。

ビューステートフィールドはまだフォームにロードされていないと思いますが、他のビットは送信されています。イベント検証を維持しながら、このエラーを防ぐための最良の方法は何ですか?

4

5 に答える 5

4

ここで同様の質問に答えました。引用するには:

基本的に、ViewState をページの上部にロードする必要があります。.NET 3.5 SP1 では、RenderAllHiddenFieldsAtTopOfFormプロパティが PagesSection 構成に追加されました。

Web.config

<configuration>

    <system.web>

        <pages renderAllHiddenFieldsAtTopOfForm="true"></pages>

    </system.web>

</configuration>

興味深いことに、これのデフォルト値は true です。したがって、本質的に、.NET 3.5 SP1 を使用している場合、ViewState はフォームの上部に (ページの残りの部分が読み込まれる前に) 自動的にレンダリングされるため、表示される ViewState エラーは解消されます。

于 2008-10-31T19:35:54.080 に答える
2

__EVENTVALIDATIONこれは、ViewState が読み込まれていないよりも、フィールドが原因であることが多いことがわかりました。これ__EVENTVALIDATIONはページの下部にあり、ユーザーがポストバックを引き起こしたときにクライアントが受信していない場合、その例外が発生します。

私はまだ優れた解決策を見つけていませんが、大量のコンテンツが原因でこれを引き起こす傾向があるページで通常行うことは、ボタンをJavaScript関数に結び付けて、trueに設定されるだけのisLoaded変数をチェックすることですdocument.ready 呼び出し。isLoaded が false の場合はイベントを黙って食べ、true の場合は通過させます。これを設定するのは面倒ですが、無効なポストバックの問題のほとんどは解決しました。

于 2008-11-04T03:28:20.317 に答える
0

私が知る限り、ViewState はページの form タグの直後に読み込まれます。

ClientScriptManager.RegisterForEventValidation( button.UniqueID )ボタンをページに追加した後、各ボタンを使用してみましたか? ボタンを追加する場所によっては、ページのイベント フックアップが既に発生しているため、ボタンによって生成されたイベントがページに登録されない場合があります。

于 2008-10-31T19:05:12.830 に答える
0

それらのボタンの visible プロパティをデフォルトで false に設定し、ページのロードまたはイベント検証の最後にそれらの visible プロパティを true に設定するとどうなるでしょうか? このようにして、ページが完全に読み込まれるまでボタンをクリックすることを制限します。

于 2008-10-31T18:01:20.543 に答える
0

特定のサイトでは __EVENTVALIDATION タグが一番下に表示されるのに、他のすべての Web サイトでは一番上に表示される理由を突き止めるのにかなりの時間を費やしました。最終的に、Render オーバーライド イベントのコードが原因であることがわかりました。それは、無駄のないviewstateとともに、ほとんどこのエラーを取り除きましたが、適切な測定のために、エラーの原因となったボタンに以下のロジックを追加しました:

ページのどこかにある JavaScript

function CheckForHiddenFields()
{
    var EventValidation = document.getElementById('__EVENTVALIDATION');
    if (EventValidation && EventValidation.value && EventValidation.value != '')
    {
        return true;
    }
    else
    {
        return false;
    }
}

asp:Button に属性を追加します。

OnClientClick="return CheckForHiddenFields();"
于 2016-04-20T18:07:40.033 に答える