it-swarm.com.de

Ungültiges Postback- oder Rückrufargument Die Ereignisüberprüfung wird mit '<pages enableEventValidation = "true" />' aktiviert

Ich erhalte die folgende Fehlermeldung, wenn ich eine Seite von der Client-Seite aus posten. Ich habe JavaScript-Code, der eine asp: ListBox auf der Clientseite ändert.

Wie können wir das beheben?

Fehlerdetails unten:

Server Error in '/XXX' 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) +2132728
   System.Web.UI.Control.ValidateEvent(String uniqueID, String eventArgument) +108
   System.Web.UI.WebControls.ListBox.LoadPostData(String postDataKey, NameValueCollection postCollection) +274
   System.Web.UI.WebControls.ListBox.System.Web.UI.IPostBackDataHandler.LoadPostData(String postDataKey, NameValueCollection postCollection) +11
   System.Web.UI.Page.ProcessPostData(NameValueCollection postData, Boolean fBeforeLoad) +353
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1194

--------------------------------------------------------------------------------
Version Information: Microsoft .NET Framework Version:2.0.50727.1433; ASP.NET Version:2.0.50727.1433
226
Julius A

Das Problem ist, dass ASP.NET dieses zusätzliche Element oder das entfernte Listenelement nicht kennt. Sie haben eine Reihe von Optionen (unten aufgeführt):

  • Deaktivieren Sie die Ereignisvalidierung (schlechte Idee, weil Sie etwas an Sicherheit verlieren, die mit sehr geringen Kosten verbunden ist).
  • Verwenden Sie ASP.NET Ajax UpdatePanel. (Fügen Sie das Listenfeld in das Aktualisierungsfenster ein, und lösen Sie ein Update aus, wenn Sie ein Listenfeld hinzufügen oder entfernen. Auf diese Weise werden Viewstate und verwandte Felder aktualisiert und die Ereignisvalidierung wird bestanden.)
  • Vergessen Sie clientseitig und verwenden Sie das klassische Postback, und fügen Sie die listitems serverseitig hinzu oder entfernen Sie sie.

Ich hoffe das hilft. 

168
norbertB

Haben Sie Codes in Ihren PageLoad-Ereignissen? Wenn ja, dann hilft vielleicht folgendes:.

if (!Page.IsPostBack)
{ //do something }

Dieser Fehler wird ausgelöst, wenn Sie auf Ihren Befehl klicken und der Pageload erneut ausgeführt wird. In einem normalen Lebenszyklus wird Folgendes angezeigt. __ PageLoad -> Klicken Sie auf Befehl -> PageLoad (erneut) -> Process ItemCommand Event

177
Jeff Pang

Ich hatte eine Erfahrung mit DataGrid. Eine seiner Spalten war die Schaltfläche "Auswählen". Als ich in einer beliebigen Zeile auf die Schaltfläche "Auswählen" geklickt hatte, hatte ich folgende Fehlermeldung erhalten:

"Ungültiges Postback- oder Callback-Argument. Die Ereignisvalidierung ist in Configuration oder Aktiviert. <% @ Page EnableEventValidation =" true "%> auf einer Seite. Aus Sicherheitsgründen überprüft diese Funktion, ob Argumente postback oder .__ stammen von dem Serversteuerelement, das sie ursprünglich gerendert haben. Wenn die Daten gültig und erwartet sind, verwenden Sie die ClientScriptManager.RegisterForEventValidation-Methode, um die Postback- oder Callback-Daten für die Validierung zu registrieren. "

Ich habe mehrere Codes geändert und es gelang mir schließlich. Meine Erlebnisroute:

1) Ich habe das Seitenattribut in EnableEventValidation="false" geändert.Aber es hat nicht funktioniert.(Nicht nur das ist gefährlich Aus Sicherheitsgründen wurde mein Event-Handler nicht aufgerufen: void Grid_SelectedIndexChanged(object sender, EventArgs e)

2) Ich habe ClientScript.RegisterForEventValidation in der Render-Methode implementiert.Aber es hat nicht funktioniert.

protected override void Render(HtmlTextWriter writer)
{
    foreach (DataGridItem item in this.Grid.Items)
    {
        Page.ClientScript.RegisterForEventValidation(item.UniqueID);
        foreach (TableCell cell in (item as TableRow).Cells)
        {
            Page.ClientScript.RegisterForEventValidation(cell.UniqueID);
            foreach (System.Web.UI.Control control in cell.Controls)
            {
                if (control is Button)
                    Page.ClientScript.RegisterForEventValidation(control.UniqueID);
            }
        }
    }
}

3) Ich habe meinen Schaltflächentyp in der Rasterspalte von PushButton in LinkButton geändert. Es funktionierte!("ButtonType =" LinkButton "). Ich denke, wenn Sie Ihre Schaltfläche in andere Steuerelemente wie" LinkButton "ändern können, würde dies in anderen Fällen korrekt funktionieren.

37
Amir Chatrbahr

Sie wollen wirklich 2 oder 3 machen und die Ereignisüberprüfung nicht deaktivieren.

Es gibt zwei Hauptprobleme beim Hinzufügen von Elementen zu einer asp: Listbox-Clientseite.

  • Der erste ist, dass es die Ereignisvalidierung stört. Was auf dem Server zurückkam, ist nicht das, was er gesendet hat.

  • Die zweite ist, dass selbst wenn Sie die Ereignisüberprüfung deaktivieren, die Elemente im Listenfeld aus dem Viewstate neu erstellt werden, wenn Ihre Seite wieder gebucht wird, so dass alle auf dem Client vorgenommenen Änderungen verloren gehen. Der Grund dafür ist, dass ein asp.net nicht erwartet, dass der Inhalt eines Listenfelds auf dem Client geändert wird. Es wird nur erwartet, dass eine Auswahl getroffen wird, sodass alle vorgenommenen Änderungen verworfen werden.

Die beste Option ist am wahrscheinlichsten, ein Aktualisierungsfenster zu verwenden, wie es empfohlen wurde. Wenn Sie diese Clientseite wirklich benötigen, können Sie auch einen einfachen <select> anstelle von <asp:ListBox> verwenden und Ihre Liste der Elemente in einem ausgeblendeten Feld aufbewahren. Wenn die Seite auf dem Client dargestellt wird, können Sie sie aus einer Aufteilung Ihres Textfeldinhalts ausfüllen. 

Wenn Sie bereit sind, den Beitrag zu veröffentlichen, füllen Sie den Inhalt des ausgeblendeten Felds aus Ihrem geänderten <select> aus. Dann müssen Sie das natürlich wieder auf dem Server aufteilen und etwas mit Ihren Elementen tun, da Ihre Auswahl leer ist, jetzt, da sie wieder auf dem Server ist.

Alles in allem ist es eine ziemlich umständliche Lösung, die ich nicht wirklich empfehlen würde, aber wenn Sie wirklich clientseitige Änderungen an einer ListBox vornehmen müssen, funktioniert das auch. Ich würde wirklich empfehlen, dass Sie sich ein UpdatePanel ansehen, bevor Sie diese Route wählen.

27
Andy C.

Ich hatte das gleiche Problem mit einem Repeater, weil ich eine Webseite mit einem Repeater-Steuerelement in einer Website hatte, auf der EnableEventValidation aktiviert war. Es war nicht gut Ich erhielt ungültige Postback-Ausnahmen.

Was für mich funktionierte, war EnableViewState = "false" für den Repeater zu setzen. Die Vorteile sind, dass sie einfacher zu verwenden ist, so einfach wie das Deaktivieren der Ereignisvalidierung für die Website oder die Website. Der Geltungsbereich ist jedoch viel geringer als das Deaktivieren der Ereignisvalidierung für beide.

17

Keines der oben genannten Dinge funktionierte für mich. Nach mehr Nachforschungen wurde mir klar, dass ich 2 Formulare auf der Seite, die das Problem verursachten, übersehen hatte.

<body>
<form id="form1" runat="server">
<div>
        <form action="#" method="post" class="form" role="form">
        <div>
        ...
        <asp:Button ID="submitButton" runat="server"
        </div>
</div>
</body>

Beachten Sie, dass ASP.NET vor kurzem damit begonnen hat, Iframes innerhalb eines Formularkennzeichens zu berücksichtigen, das ein Formularkennzeichen im Iframedokument selbst enthält. Ich musste den iframe aus dem Form-Tag verschieben, um diesen Fehler zu vermeiden.

16
biggles

Ich hatte das gleiche Problem beim Ändern einer ListBox mit JavaScript auf dem Client. Es tritt auf, wenn Sie der ListBox neue Elemente vom Client hinzufügen, die sich beim Rendern der Seite nicht dort befanden. 

Die Lösung, die ich gefunden habe, besteht darin, das Event-Validierungssystem über alle möglichen gültigen Elemente zu informieren, die vom Client hinzugefügt werden können. Sie können dies tun, indem Sie Page.Render überschreiben und Page.ClientScript.RegisterForEventValidation für jeden Wert aufrufen, den Ihr JavaScript zum Listenfeld hinzufügen könnte:

protected override void Render(HtmlTextWriter writer)
{
    foreach (string val in allPossibleListBoxValues)
    {
        Page.ClientScript.RegisterForEventValidation(myListBox.UniqueID, val);
    }
    base.Render(writer);
}

Dies kann ziemlich schmerzhaft sein, wenn Sie eine große Anzahl potenziell gültiger Werte für das Listenfeld haben. In meinem Fall habe ich Elemente zwischen zwei ListBoxen verschoben - eine, die alle möglichen Werte enthält, und eine, die anfangs leer ist, aber mit einer Teilmenge der Werte des ersten in JavaScript gefüllt wird, wenn der Benutzer auf eine Schaltfläche klickt. In diesem Fall müssen Sie nur die Elemente in der ersten ListBox durchlaufen und jedes mit dem zweiten Listenfeld registrieren:

protected override void Render(HtmlTextWriter writer)
{
    foreach (ListItem i in listBoxAll.Items)
    {
        Page.ClientScript.RegisterForEventValidation(listBoxSelected.UniqueID, i.Value);
    }
    base.Render(writer);
}
11
Josh

Eine andere Möglichkeit, die hier nicht erwähnt wird, ist die Unterklasse ListBox

Ie. 

public class ListBoxNoEventValidation : ListBox 
{
}

ClientEventValidation schliesst das Attribut System.Web.UI.SupportsEventValidation ab, wenn Sie es subclassieren. Wenn Sie es nicht erneut explizit hinzufügen, wird die Überprüfungsroutine niemals aufgerufen. Das funktioniert mit jedem Steuerelement und ist der einzige Weg, auf dem ich es gefunden habe, es auf einer Steuerelementbasis (dh nicht auf Seitenebene) zu "deaktivieren".

9
Mike C.

3: Ich habe meinen Knopf in Raster geändert Spalte von "PushButton" bis "LinkButton". Es funktionierte! ("ButtonType =" LinkButton ") Ich denke, wenn Sie können Ihre Schaltfläche in andere Steuerelemente wie" LinkButton "ändern, in anderen Fällen würde sie ordnungsgemäß funktionieren.

Ich wünschte, ich könnte dich wählen, Amir (leider ist meine Vertretung zu niedrig.) Ich hatte nur dieses Problem und das Ändern dieses Problems funktionierte wie ein Champion in meinem Gridview. Etwas abseits denke ich, der gültige Code lautet: ButtonType = "Link"

Ich vermute, das liegt daran, dass, wenn Sie auf "Bearbeiten" klicken, Ihre Bearbeitung in "Aktualisieren" und "Abbrechen" geändert wird, die dann beim Senden wieder in "Bearbeiten" geändert werden. Und diese Verschiebungssteuerung macht .net unruhig.

7
brian welch

(1) EnableEventValidation = "false" ................... Es funktioniert für mich nicht.

(2) ClientScript.RegisterForEventValidation .... Es funktioniert für mich nicht.

Lösung 1:

Ändern Sie Button/ImageButton in LinkButton in GridView. Es klappt. (Aber ich mag ImageButton)

Recherche: Button/ImageButton und LinkButton verwenden unterschiedliche Methoden zum Postback

Originaler Artikel:

http://geekswithblogs.net/mahesh/archive/2006/06/27/83264.aspx

Lösung 2:

Geben Sie in OnInit () den folgenden Code ein, um eine eindeutige ID für Button/ImageButton festzulegen:

protected override void OnInit(EventArgs e) {
  foreach (GridViewRow grdRw in gvEvent.Rows) {

  Button deleteButton = (Button)grdRw.Cells[2].Controls[1];

  deleteButton.ID = "btnDelete_" + grdRw.RowIndex.ToString();           
  }
}

Originaler Artikel: 

http://www.c-sharpcorner.com/Forums/Thread/35301/

7
yilee

sie versuchen so etwas in Ihrer ASPX-Seite

hinzufügen 

EnableEventValidation = "false"

sie können gerne Fragen stellen!

7
user3690871

Wenn Sie die DropdownList über ein clientseitiges Skript ausfüllen, löschen Sie die Liste, bevor Sie das Formular zurück an den Server senden. dann wird sich ASP.NET nicht beschweren und die Sicherheit wird weiterhin aktiviert.

Um die Daten aus der DDL zu erhalten, können Sie der DDL ein "OnChange" -Ereignis zuordnen, um den Wert in einer ausgeblendeten Eingabe oder in einem Textfeld mit Style = "display: none;"

6
MyEname

Ich habe eine verschachtelte Rasteransicht implementiert und hatte das gleiche Problem. Ich habe LinkButton anstelle der Bildschaltfläche wie folgt verwendet:

bevor ich eine Kolumne wie diese hatte:

<asp:TemplateField ItemStyle-Width="9">
  <ItemTemplate>
 <asp:ImageButton ID="ImgBtn" ImageUrl="Include/images/gridplus.gif" CommandName="Expand"
                        runat="server" />
  </ItemTemplate>
</asp:TemplateField>

Ich habe so ersetzt.

<asp:TemplateField>
<ItemTemplate>
     <asp:LinkButton  CommandName="Expand" ID="lnkBtn"  runat="server" ><asp:Image  ID="Img"  runat="server" ImageUrl="~/Images/app/plus.gif" /></asp:LinkButton>
      </ItemTemplate>
</asp:TemplateField> 
5
Swathi

Ich hatte ein ähnliches Problem, aber ich verwendete weder ASP.Net 1.1 noch das Aktualisieren eines Steuerelements über Javascript .. Mein Problem trat nur bei Firefox und nicht bei IE (!) Auf.

Ich habe einer DropDownList Optionen für das PreRender-Ereignis wie folgt hinzugefügt:

DropDownList DD = (DropDownList)F.FindControl("DDlista");
HiddenField HF = (HiddenField)F.FindControl("HFlista");
string[] opcoes = HF.value.Split('\n');
foreach (string opcao in opcoes) DD.Items.Add(opcao);

Mein "HF" (hiddenfield) hatte die Optionen durch die Newline getrennt, wie folgt:

HF.value = "option 1\n\roption 2\n\roption 3";

Das Problem war, dass die HTML-Seite in den Optionen des "select", das DropDown darstellte, defekt war (ich meine hatte Zeilenumbrüche).

Also löste ich mein Problem, indem ich eine Zeile hinzufügte:

DropDownList DD = (DropDownList)F.FindControl("DDlista");
HiddenField HF = (HiddenField)F.FindControl("HFlista");
string dados = HF.Value.Replace("\r", "");
string[] opcoes = dados.Split('\n');
foreach (string opcao in opcoes) DD.Items.Add(opcao);

Hoffe das hilft jemandem.

5
pamelo

Ich hatte das gleiche Problem, was ich getan habe:

Ich habe gerade eine Bedingung if(!IsPostBack) hinzugefügt und es funktioniert gut :)

3
Niket

wenn Sie UseSubmitBehavior="True" in UseSubmitBehavior="False" ändern, wird Ihr Problem gelöst

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

Dieser Fehler wird ohne Postback angezeigt

Code hinzufügen: 

If(!IsPostBack){

 //do something

}
3

Wir sind auf dieses Problem gestoßen, als wir unsere regulären ASPX-Seiten in Inhaltsseiten konvertierten. 

Die Seite mit diesem Problem hatte ein </form>-Tag in einem der Content-Abschnitte. Daher wurden zwei Formularend-Tags zur Laufzeit gerendert, die zu diesem Problem führten. Durch das Entfernen des zusätzlichen Formularend-Tags von der Seite wurde dieses Problem behoben.

2
Tushar

Ich weiß, dass dies ein sehr alter Beitrag ist. Angenommen, Sie rufen Ihre Bewerbung an, hier ist eine Idee, die für mich funktioniert hat:

  1. Implementieren Sie den ICallbackEventHandler auf Ihrer Seite
  2. Rufen Sie ClientScriptManager.GetCallbackEventReference auf, um Ihren serverseitigen Code aufzurufen
  3. Wenn die Fehlermeldung besagt, können Sie dann ClientScriptManager.RegisterForEventValidation aufrufen

Wenn Sie keine vollständige Kontrolle benötigen, können Sie ein Aktualisierungsfenster verwenden, das dies für Sie tun würde.

2
tmck2

Eine einfache Lösung für dieses Problem ist die Verwendung von IsPostBack check beim Laden Ihrer Seite. Das wird dieses Problem lösen.

2
user249527

In diesem Fall fügen Sie der Schaltfläche in RowDataBound des Rasters eine ID hinzu. Es wird Ihr Problem lösen.

2
nilesh

Ajax UpdatePanel macht es, und ich denke, es ist der einfachste Weg, den Ajax Postback Overhead zu ignorieren.

2
netseng

Wenn Sie Ajax-Aktualisierungsfenster verwenden. Fügen Sie das <Triggers>-Tag hinzu und lösen Sie darin den Button oder das Steuerelement aus, das den PostBack mit <asp:PostBackTrigger .../> verursacht

1
devo882

Nachdem dieses Problem auf Remote-Servern (Produktion, Test, qa, Staging usw.) aufgetreten war, jedoch nicht auf lokalen Entwicklungsarbeitsstationen, stellte ich fest, dass der Anwendungspool mit einem anderen RequestLimit als 0 konfiguriert war. 

Dies hatte zur Folge, dass der App-Pool aufgab und mit der in der Frage angegebenen Ausnahme antwortete. 

1
StingyJack

Die beste Option ist, ein ausgeblendetes Feld zu verwenden und die Ereignisüberprüfung nicht zu deaktivieren. Ändern Sie auch jedes Listenfeld und die Dropdown-Liste mit dem Runat-Serverattribut

1
Programista

Wie Nick B sagte und das für mich funktioniert hat, müssen Sie in einigen Fällen Zeilenumbrüche entfernen. Schauen Sie sich den Code an:

-Falscher Weg:

<asp:DropDownList ID="DropDownList1" runat="server">
    <asp:ListItem Selected="True">
            Item 1</asp:ListItem>
    <asp:ListItem>
            Item 2</asp:ListItem>
    <asp:ListItem>
            Item 3</asp:ListItem>
</asp:DropDownList>

-Richtiger Weg:

<asp:DropDownList ID="DropDownList1" runat="server">
    <asp:ListItem Selected="True">Item 1</asp:ListItem>
    <asp:ListItem>Item 2</asp:ListItem>
    <asp:ListItem>Item 3</asp:ListItem>
</asp:DropDownList>

Es ist nur für mich in IE10 + aufgetreten

1
Andre RB

Ich habe datalist benutzt und bekam den gleichen Fehler für meinen Push Button. Ich verwende einfach IsPostBack, um meine Steuerelemente zu überprüfen und auszufüllen, und das Problem ist gelöst! Großartig!!!

1
Razia

Wenn Sie im Voraus wissen, welche Daten gefüllt werden können, können Sie den ClientScriptManager verwenden, um dieses Problem zu beheben. Ich hatte dieses Problem, als ich dynamisch eine Dropdown-Box mit Javascript auf einer vorherigen Benutzerauswahl auffüllte.

Hier ein Beispielcode zum Überschreiben der Render-Methode (in VB und C #) und zum Deklarieren eines potenziellen Werts für die Dropdown-Liste ddCar.

In VB:

Protected Overrides Sub Render(ByVal writer As System.Web.UI.HtmlTextWriter)

    Dim ClientScript As ClientScriptManager = Page.ClientScript

    ClientScript.RegisterForEventValidation("ddCar", "Mercedes")

    MyBase.Render(writer)
End Sub

oder eine leichte Variation in C # könnte sein:

protected override void Render(HtmlTextWriter writer)
{
    Page.ClientScript.RegisterForEventValidation("ddCar", "Mercedes");
    base.Render(writer);
}

Für Neueinsteiger: Dies sollte in den Code hinter der Datei (.vb oder .cs) gehen, oder wenn in der aspx-Datei verwendet, können Sie in <script>-Tags einpacken.

1
CraigS

Wenn Sie gridview verwenden und gridview nicht bei pageload in! Ispostback binden, tritt dieser Fehler auf, wenn Sie auf edit klicken und eine Zeile in gridview löschen. 

 protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
        bindGridview();
        }
1
Akhil Singh

Dies war der Grund, warum ich es bekam:

Ich hatte einen ASP: ListBox. Anfangs war es versteckt. Auf Kundenseite würde ich es über AJAX mit Optionen befüllen. Der Benutzer hat eine Option ausgewählt. Wenn Sie dann auf die Schaltfläche "Senden" klicken, wird der Server über die ListBox total lustig, da er sich nicht daran erinnern konnte, dass er Optionen hatte.

Was ich also getan habe, ist sicherzustellen, dass ich alle Listenoptionen lösche, bevor ich das Formular an den Server zurücksende. Auf diese Weise beschwerte sich der Server nicht, da die Liste leer war und der Client leer war.

Sortiert !!!

1
user2520440

Was für mich funktioniert hat, ist der folgende Code von page_load auf page_prerender zu verschieben:

lstMain.DataBind();
Image img = (Image)lstMain.Items[0].FindControl("imgMain");

// Define the name and type of the client scripts on the page.
String csname1 = "PopupScript";
Type cstype = this.GetType();

// Get a ClientScriptManager reference from the Page class.
ClientScriptManager cs = Page.ClientScript;

// Check to see if the startup script is already registered.
if (!cs.IsStartupScriptRegistered(cstype, csname1))
{
    cs.RegisterStartupScript(cstype, csname1, "<script language=javascript> p=\"" + img.ClientID + "\"</script>");
}
1
Murad Dodhiya

Vor vier Minuten habe ich den gleichen Fehler erhalten. Dann habe ich während einer halben Stunde wie Sie recherchiert. In allen Foren heißt es im Allgemeinen "Seite hinzufügen enableEvent .. = false oder true". Jede vorgeschlagene Lösung hat meine Probleme nicht gelöst, bis ich sie gefunden habe. Das Problem ist leider eine ASP.NET-Schaltfläche. Ich habe es vor zwei Sekunden entfernt. Ich habe versucht, mit "imagebutton" zu ersetzen, aber es war auch nicht akzeptabel (weil es den gleichen Fehler gab).

Schließlich habe ich durch LinkButton ersetzt. es scheint zu funktionieren!

1
cem

Zu Ihrer Information Ich hatte das gleiche Problem mit dieser Fehlermeldung und es gab zwei Formular-Tags auf derselben Seite. Es gab einen auf der Masterseite und einen auf der Seite selbst. Sobald ich das zweite Form-Tag-Paar entfernt hatte, war das Problem behoben.

0
markiyanm

Für uns passierte das Problem zufällig nur in der Produktionsumgebung. Die RegisterForEventValidation hat nichts für uns getan.

Schließlich stellten wir fest, dass in der Webfarm, in der die asp.net-App ausgeführt wurde, zwei IIS Server mit unterschiedlichen .NET-Versionen installiert waren. Es scheint also, dass sie unterschiedliche Regeln für die Verschlüsselung des asp.net-Validierungs-Hash hatten. Das Aktualisieren löste den größten Teil des Problems.

Außerdem haben wir den machineKey (compatibleMode) (auf beiden Servern gleich), httpRuntime (targetFramework), ValidationSettings: UnobtrusiveValidationMode, pages (renderAllHiddenFieldsAtTopOfForm) in der web.config beider Server konfiguriert.

Wir haben diese Site verwendet, um den Schlüssel zu generieren https://www.allkeysgenerator.com/Random/ASP-Net-MachineKey-Generator.aspx

Wir haben viel Zeit damit verbracht, das zu lösen. Ich hoffe, das hilft jemandem.

<appSettings>
   <add key="ValidationSettings:UnobtrusiveValidationMode" value="None" />
...
</appSettings>
<system.web>
   <machineKey compatibilityMode="Framework45" decryptionKey="somekey" validationKey="otherkey" validation="SHA1" decryption="AES />
   <pages [...] controlRenderingCompatibilityVersion="4.0" enableEventValidation="true" renderAllHiddenFieldsAtTopOfForm="true" />
   <httpRuntime [...] requestValidationMode="2.0" targetFramework="4.5" />
...
</system.web>
0

Wenn ich die ID in ItemDataBound hinzufügte, wurde mir der Fehler nicht angezeigt, aber der Befehlsname wurde nicht angezeigt. Der Befehlsname war leer. Dann habe ich auch den Befehlsnamen während ItemDataBound hinzugefügt. Dann wurde das gleiche Problem gelöst. Danke Nilesh, toller Vorschlag. Es funktionierte :)

0
rupesh

Ich habe diesen genauen Fehler umgangen, indem ich die ListBox nicht zu einer übergeordneten Seiten-/Steuerelementauflistung hinzugefügt habe. Weil ich wirklich keine serverseitigen Funktionen benötigte. Ich wollte es nur verwenden, um den HTML-Code für ein benutzerdefiniertes Serversteuerelement auszugeben, was ich selbst im OnRender-Ereignishandler gemacht habe. Ich hoffte, dass die Verwendung des Steuerelements mich davon abhalten würde, meiner eigenen HTML-Datei zu schreiben.

Diese Lösung funktioniert wahrscheinlich für die meisten nicht, aber sie hindert ASP.NET daran, ValidateEvent für das Steuerelement auszuführen, da das Steuerelement zwischen Postbacks nicht im Speicher verbleibt.

Mein Fehler wurde insbesondere dadurch verursacht, dass das ausgewählte Listenelement ein Element war, das nicht im vorherigen Postback des Listenfelds enthalten war. Wenn das jedem hilft.

0
Boog

Ich hatte das gleiche Problem, zwei Listenfelder und zwei Schaltflächen.

Die Daten in den Listenfeldern wurden aus einer Datenbank geladen. Sie können Elemente durch Klicken auf die Schaltflächen zwischen Feldern verschieben.

Ich bekam ein ungültiges Postback.

es stellt sich heraus, dass die Daten Wagenrücklaufzeilen enthielten, die Sie nicht sehen können, wenn sie im Listenfeld angezeigt werden.

funktionierte gut in jedem Browser mit Ausnahme von IE 10 und IE 11.

Entfernen Sie die Wagenrücklaufzeilen und alles funktioniert einwandfrei.

0
Nick B

Das folgende Beispiel zeigt, wie Sie den Wert der IsPostBack-Eigenschaft testen, wenn die Seite geladen wird, um festzustellen, ob die Seite zum ersten Mal gerendert wird oder auf ein Postback reagiert. Wenn die Seite zum ersten Mal gerendert wird, ruft der Code die Page.Validate-Methode auf .. Die Seitenmarkierung (nicht dargestellt) enthält RequiredFieldValidator-Steuerelemente, die Sternchen anzeigen, wenn für ein erforderliches Eingabefeld kein Eintrag erfolgt. Beim Aufrufen von Page.Validate werden die Sternchen sofort beim Rendern der Seite angezeigt, anstatt zu warten, bis der Benutzer auf die Schaltfläche "Senden" klickt. Nach einem Postback müssen Sie Page.Validate nicht aufrufen, da diese Methode als Teil des Page-Lebenszyklus aufgerufen wird. 

 private void Page_Load()
    {
        if (!IsPostBack)
        {      
        }
    }
0
Sudhakar Rao

Mein Problem wurde behoben, wenn ein Ereignis am Ende des Gitters auf der Serverseite abgebrochen wurde.

protected void grdEducation_RowEditing(object sender, GridViewEditEventArgs e)
{
  // do your processing ...

  // at end<br />
  e.Cancel = true;
}
0
Zolfaghari