web-dev-qa-db-ja.com

asp.net:無効なポストバックまたはコールバック引数

このエラーが発生しています:

Server Error in '/' Application.

Invalid postback or callback argument.  Event validation is enabled using <pages enableEventValidation="true"/> in configuration or <%@ Page EnableEventValidation="true" %> in a page.  For security purposes, this feature verifies that arguments to postback or callback events originate from the server control that originally rendered them.  If the data is valid and expected, use the ClientScriptManager.RegisterForEventValidation method in order to register the postback or callback data for validation.

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.ArgumentException: Invalid postback or callback argument.  Event validation is enabled using <pages enableEventValidation="true"/> in configuration or <%@ Page EnableEventValidation="true" %> in a page.  For security purposes, this feature verifies that arguments to postback or callback events originate from the server control that originally rendered them.  If the data is valid and expected, use the ClientScriptManager.RegisterForEventValidation method in order to register the postback or callback data for validation.

Source Error: 

An unhandled exception was generated during the execution of the current web request. Information regarding the Origin and location of the exception can be identified using the exception stack trace below.

Stack Trace: 


[ArgumentException: Invalid postback or callback argument.  Event validation is enabled using <pages enableEventValidation="true"/> in configuration or <%@ Page EnableEventValidation="true" %> in a page.  For security purposes, this feature verifies that arguments to postback or callback events originate from the server control that originally rendered them.  If the data is valid and expected, use the ClientScriptManager.RegisterForEventValidation method in order to register the postback or callback data for validation.]
   System.Web.UI.ClientScriptManager.ValidateEvent(String uniqueId, String argument) +8627417
   System.Web.UI.WebControls.ListBox.LoadPostData(String postDataKey, NameValueCollection postCollection) +360
   System.Web.UI.WebControls.ListBox.System.Web.UI.IPostBackDataHandler.LoadPostData(String postDataKey, NameValueCollection postCollection) +13
   System.Web.UI.Page.ProcessPostData(NameValueCollection postData, Boolean fBeforeLoad) +346
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1743

Version Information: Microsoft .NET Framework Version:2.0.50727.3623; ASP.NET Version:2.0.50727.3618

どういう意味ですか?

ここに私のコードがあります:

<%@ Page EnableEventValidation="true" Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="EnterData.DataEntry.WebForm1" %>    

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title></title>

    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js" type="text/javascript"></script>
    <script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.16/jquery-ui.js" type="text/javascript"></script>

    <link href="../niceforms/niceforms-default.css" rel="stylesheet" type="text/css" />
    <script src="../niceforms/niceforms.js" type="text/javascript"></script>

    <link href="../jquery-ui-1.8.16.custom.css" rel="stylesheet" type="text/css" />
    <style type="text/css">
        .list-problems {
        height:600px !important;
        width:200px !important;
        display:inline-block;
    }
    </style>

    <script>
        jQuery(function($) {
        //$("#occurrence_dateTextBox").mask("99/99/9999");
        //$("#<%= report_dateTextBox.ClientID %>").mask("99/99/9999");
        $("#<%= occurrence_dateTextBox.ClientID %>").datepicker();
        $("#<%= report_dateTextBox.ClientID %>").datepicker();
        //$(".datepicker").datepicker(); 

    });
    $(function() {
        $.get('../file.txt', function(data) {
            var output = data.split('\n'),
            tmp = '';
            for (i = 0; i < output.length; i++) {
                tmp += '<option value=' + output[i] + '>' + output[i] + '</option>';
            }
            $('#lstProblems').html(tmp);

        });
    });

    $(function() {
        $("select").multiselect();
    });

    function getselectedproblems() {
        var selectedLanguages = new Array();
        jQuery('#lstProblems option:selected').each(function() {
            selectedLanguages.Push(jQuery(this).val());
        });
    }

    </script>

</head>
<body><div id="container">
    <form id="form1" runat="server" class="niceform">

        <fieldset>

        <legend>Section A</legend>

        <dl>

            <dt><label for="occurrence_dateTextBox" >Occurrence Date:</label></dt>
            <dd><asp:TextBox ID="occurrence_dateTextBox" runat="server" size="50"/></dd>
        </dl>

        <dl>

            <dt><label for="report_dateTextBox">Report Date:</label></dt>
            <dd><asp:TextBox ID="report_dateTextBox" runat="server" size="50"/></dd>
        </dl>

        <dl>

            <dt><label for="spec_idTextBox">Specimen ID:</label></dt>
            <dd><asp:TextBox ID="spec_idTextBox" runat="server" size="50"/></dd>
        </dl>

        <dl>

            <dt><label for="batch_idTextBox">Batch ID:</label></dt>
            <dd><asp:TextBox ID="batch_idTextBox" runat="server" size="50"/></dd>
        </dl>

        <dl>

            <dt><label for="report_byTextBox">Report By:</label></dt>
            <dd><asp:TextBox ID="report_byTextBox" runat="server" size="50"/></dd>
        </dl>

        <dl>

            <dt><label for="identified_byTextBox">Identified ID:</label></dt>
            <dd><asp:TextBox ID="identified_byTextBox" runat="server" size="50"/></dd>
        </dl>

        </fieldset>

        <fieldset>
        <legend>Section B</legend>

        <dl>

            <dt><label for="problemTextBox">Problem:</label></dt>
            <dd><asp:TextBox ID="problemTextBox" runat="server" size="50"/></dd>


        </dl>

        <dl>
            <dt><label for="lstProblems">Problems List:</label></dt>
            <dd>
                <asp:ListBox ID="lstProblems" runat="server" SelectionMode="Multiple" CssClass="list-problems"></asp:ListBox>
            </dd>

        </dl>  

        <dl>
                <dd><select size="8" multiple="true" >
                <optgroup label="Europe">
                    <option>United Kingdom</option>
                    <option>Luxembourg</option>
                </optgroup>    
                <optgroup label="Asia">
                    <option>India</option>
                    <option>Dubai</option>
                </optgroup>
            </select> </dd>    
        </dl>
        <dl>
            <asp:ListBox ID="ListBox1" runat="server" DataSourceID="SqlDataSource1" 
                DataTextField="batch" DataValueField="batch" SelectionMode="Multiple" 
                Height="100px" Width="329px"></asp:ListBox>
            <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
                ConnectionString="<%$ ConnectionStrings:LOM %>" 
                SelectCommand="SELECT [batch] FROM [lom_batch]"></asp:SqlDataSource>
        </dl>

        </fieldset>

        <fieldset>
        <legend>Section C</legend>
        <dl>

            <dt><label for="section_c_issue_error_identified_byTextBox">Issue/Error Identified By:</label></dt>
            <dd><asp:TextBox ID="section_c_issue_error_identified_byTextBox" runat="server" size="50"/></dd>


        </dl>

        <dl>

            <dt><label for="section_c_commentsTextBox">Comments:</label></dt>
            <dd><asp:TextBox ID="section_c_commentsTextBox" runat="server" size="50"/></dd>


        </dl>       

        </fieldset>

        <fieldset>
        <legend>Section D</legend>
        <dl>

            <dt><label for="section_d_investigationTextBox">Investigation:</label></dt>
            <dd><asp:TextBox ID="section_d_investigationTextBox" runat="server" size="50"/></dd>


        </dl>

        </fieldset>

        <fieldset>
        <legend>Section E</legend>
        <dl>

            <dt><label for="section_e_corrective_actionTextBox">Corrective Action:</label></dt>
            <dd><asp:TextBox ID="section_e_corrective_actionTextBox" runat="server" height="200" TextMode="MultiLine" size="50"/></dd>


        </dl>


        </fieldset>

        <fieldset>
        <legend>Section F</legend>
        <dl>

            <dt><label for="section_f_commentsTextBox">Comments:</label></dt>
            <dd><asp:TextBox ID="section_f_commentsTextBox" runat="server" size="50"/></dd>


        </dl>

        </fieldset>

        <fieldset>
        <legend>Pre-Analytical</legend>
        <dl>

            <dt><label for="prePracticeCodeTextBox">Practice Code:</label></dt>
            <dd><asp:TextBox ID="prePracticeCodeTextBox" runat="server" Visible="false"/></dd>


        </dl>

        <dl>

            <dt><label for="preContactTextBox1">Contact:</label></dt>

            <dd><asp:TextBox ID="preContactTextBox" runat="server" Visible="false"/></dd>


        </dl>

        <dl>
            <dt><label for="CheckBox1">PreAnalytical?</label></dt>
            <dd> <asp:CheckBox ID="CheckBox1" runat="server" CausesValidation="false"
                            Visible="true" AutoPostBack="true" OnCheckChanged="CheckBox1_CheckedChanged"/></dd>
        </dl>

        </fieldset>

        <asp:Button ID="Button1" runat="server" Text="Button" OnClick="SubmitData"  OnClientClick="JSfunction()"/>

    </form>

</div></body>
</html>

私は何を間違えていますか?

送信ボタンを押した後、このエラーが表示されます。

aspxファイルに、最初の行を次のように配置する必要があります。

<%@ Page EnableEventValidation="false" %>

既に<%@ Pageのようなものがある場合は、残りを追加するだけです=> EnableEventValidation="false" %>

しないことをお勧めします。

67
Royi Namir

テキストの最初の行を見ると、エラーを収集できます。

この機能は、ポストバックまたはコールバックイベントへの引数が、元々それらをレンダリングしたサーバーコントロールから発信されていることを検証します

LstProblemsドロップダウンを動的に編集しているため、ASP.NETをポストバックすると、「警告!ドロップダウンに無効なエントリがあります!」と表示されます。そして、そのエラーを投げるのを恐れています。イベントの検証をオフにするのが適切なソリューションであるかどうかを判断する必要がありますが、その背後にあるアイデアはサイトを無料で安全にすることであるため、実行する前に調査します。

以下は、私よりも何をすべきかを説明するより良い仕事をする別のstackoverflowの答えです: 無効なポストバックまたはコールバック引数。イベント検証は、 '<pages enableEventValidation = "true" />' を使用して有効にします

31
Dave L

気をつけるべきもう一つのことは、ネストされている場合、このエラーが発生する可能性があるということです

<form

.Netフォーム内のタグ。

16
TheAlbear

Page_Load()イベントにコードがある場合。これを追加してみてください:

if (!Page.IsPostBack)
{ 
//your code here 
}
16
Syed Ali Taqi

動的にバインドし、EnableViewState = "false"を追加すると、エラーメッセージが抑制されたデータリストでこの問題が発生しました。コールバックごとに変更される場合と変更されない場合があるので、維持する必要があります。だからこそ、動的にバインドしています。

8
Corey

このエラーは、許可されていないマスターページにネストされた<form>タグによっても発生する可能性があります。

<form id="someid"></form>

これは、テンプレートを選択し、それをどこかからコードをコピーした場合に発生する可能性があります。

解決

<form>タグのネストを解除する必要があります。次のようになります

<form method="" name="form1">
  <form method="" name="form2>
  </form>
</form>

になるはずです

<form method="" name="form1">    
</form>

<form method="" name="form2>    
</form>
6
Hammad Khan

トップページに追加

protected void Page_Load(object sender, EventArgs e)
{    
    if (!Page.IsPostBack)
    {
        //Code display data
    }
}
4
Duc Tung

UseSubmitBehavior="True"UseSubmitBehavior="False"に変更すると、問題は解決します。

<asp:Button ID="BtnDis" runat="server" CommandName="BtnDis" CommandArgument='<%#Eval("Id")%>' Text="Discription" CausesValidation="True" UseSubmitBehavior="False" />
4
praveen

ああ、残念です。それらを追加すると、本質的にクライアント側のasp.netが爆発します。また、EventValidationをオフにする必要があることも残念です。いくつかの重要な保護機能があるためです(たとえば、ドロップダウンボックスへの悪意のあるインジェクション)。もう1つの代替方法は、独自の複合コントロールを作成することです。もちろん、ここでは、それよりも少し手間がかかります。イベントの検証も無効にすることをお勧めしますが、非表示のキー、コンボボックスを介したSQLインジェクションなど、単に変更するだけでは不適切な方法で使用される可能性のあるページの値を信頼しないように注意してください.

3

Prerenderイベントでデータを入力することもできます。このようにして、検証を維持し、安全を確保できます。リピーターを使用した例を次に示します。

protected void Page_PreRender(object sender, EventArgs e)
     {
        List<Objects.User> users = Application.User.GetAllUsers();

        Repeater1.DataSource = users;
        Repeater1.DataBind();
      }
2
Pieter de Vries

ViewStateMode = "Disabled"を追加できます

asp:UpdatePanel ID = "UpdatePanel1" runat = "server" ViewStateMode = "Disabled"

1
Jawad Siddiqui

ローカルサーバーではなく、リモートサーバー(運用、テスト、qa、ステージングなど)でこの問題が発生した後、アプリケーションプールが0以外のRequestLimitで構成されていることがわかりました。

これにより、アプリプールはあきらめて、質問に記載されている例外を返します。

私のinstallshieldプロジェクトでアプリプールの定義が「3」を使用するように変更された(おそらく、単にクリックミスまたはタイプミスした)途中です。

1
StingyJack

私の解決策は追加することでした:

ctlUpdatePanel.Update();

ポストバック後にコントロールをバインドした後。 UpdateMode = "Conditional"属性を持つupdatepanelにありました。

1
Tone Škoda

これはおそらくあなたの問題の原因ではありませんが、ドロップダウンでoptgroupsを使用していることに気づいたので、この問題で誰かがここにたどり着いた場合に役立つかもしれないと思いました。私にとっては、optgroupsでレンダリングするドロップダウンリストを作成する必要があり、受け入れられた答え here を使用することになりましたが、コントロールを正しくレンダリングする間、このエラーが発生しました。どのように過ぎ去ったかは、私の答え こちら で詳しく説明されています。

0
Doug F

同じ問題、2つのリストボックスと2つのボタンがありました。

リストボックスのデータはデータベースからロードされていたため、ボタンをクリックしてボックス間でアイテムを移動できました。

無効なポストバックが発生していました。

リストボックスに表示されたときに表示できないキャリッジリターンラインフィードがデータに含まれていたことがわかります。

IE 10およびIE 11を除くすべてのブラウザーで正常に機能しました。

キャリッジリターンラインフィードを削除すると、すべて正常に機能します。

0
Nick B

私は別のページからのコピーペーストのために私が同様の問題を抱えていた、私が得たもの:

<form id="form1" runat="server">
    ...
    <form id="form2" runat="server">
    ....
    </form>
</form>

Id = "form1"のフォーム内でid = "form2"のフォームを削除し、問題を解決しました。これはあなたの問題ではないかもしれませんが、似たようなものかもしれません。

0
Eugene Bosikov