Referitor la utilizarea controlului Gridview pe aceeași pagină, s-a constatat că evenimentul de actualizare nu poate fi răspuns de către server, pare că alarma sa de eroare și apoi interogă unele informații, iar acum soluția este rezumată astfel: Apasă pe evenimentul de actualizare nu poate răspunde deoarece parametrul postback sau callback este invalid. Validarea evenimentului este activată în configurație cu <pages enableEventValidation="true"/> sau <%@ Page EnableEventValidation="true" %> pe pagini. Din motive de securitate, această funcție verifică dacă parametrii evenimentelor de postback sau callback provin de la controlul serverului care le-a redat inițial. Dacă datele sunt valide și așteptate, folosește Clientscrip pentru a elimina metoda tManager.RegisterForEventValidation pentru a înregistra o dată postback sau callback pentru validare.
Descriere: O excepție negestionată a avut loc în timpul executării cererii web curente. Verifică informațiile despre stack trace pentru detalii despre eroare și de unde a venit în codul tău care a cauzat eroarea.
Detalii excepție: System.ArgumentException: Parametri invalidi de postback sau callback. Validarea evenimentelor este activată în configurație cu < pagini enableEventValidation="true"/> sau <% @ Page EnableEventValidation="true" %> pe pagini. Din motive de securitate, această funcție verifică că parametrii evenimentului de postback sau callback provin de la controlul serverului care i-a redat inițial. Dacă datele sunt valide și așteptate, folosește Clientscrip pentru a elimina metoda tManager.RegisterForEventValidation pentru a înregistra o dată postback sau callback pentru validare. După ce m-am uitat mult timp, nu am găsit nicio problemă și a fost corect să verific din nou codul, am verificat ID-urile și atributele tuturor controalelor de pe pagină și tot nu am găsit problema. Mai târziu, am aflat că asta s-a întâmplat: Condiții de apariție: 1. Există controale ascunse pe ecran. 2. Mai multe legături Gridview. 3. Îmbrăcați în mai multe forme. Cauze ale apariției: . .NET generează un câmp ascuns __EVENTVALIDATION în pagina finală, bazat pe elementele de ieșire din pagină. A fost făcut un test simplu. Creează un <asp: button id="btnSubmit" runat="server" text="Submit" tooltip="Submit" /> și creează handler-ul de evenimente Click corespunzător. Rulează programul și răspunde corect la eveniment. Apoi setează btnSubmit.Visable=false și adaugă manual <input type="submit" name="btnSubmit" value="Submit" /> pe pagină. Rulează programul și o excepție va apărea împreună cu conținutul EnableEventValidation. Setează <@Page EnableEventValidation="false" > rulează din nou programul pentru a răspunde corect la eveniment. Observând conținutul celor două __EVENTVALIDATION înainte și după, se poate descoperi că sunt diferite. Referitor la excepția care apare, se poate considera că btnSubmit nu este inclus în rezultat, dar când este trimis în fundal, există conținut corespunzător, care este inconsistent, deci în cazul verificării evenimentelor este activat. .NET face o excepție.
Soluția 1: Page_Load(obiect emițător, EventArgs e)
{ dacă (! Page.IsPostBack) { legarea datelor; }
} Soluția 2: <pagini enableEventValidation="false"/> 1. Adaugă EnableEventValidation="false" la limbajul paginii <%@ "C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Moștenește "_Default" %> din pagină. (În primul rând)
2. Parcurge web.config <system.web> <pagini enableEventValidation="false"/>
3. Este un Form nesting, o pagină poate avea doar un singur Form, care poate fi rezolvat prin verificarea atentă a codului.
4. Dacă pagina conține controale precum DropDownList sau ListBox, acest lucru poate fi cauzat de următoarele motive:
4.1 Utilizarea ajax în meniul derulant se găsește frecvent în meniul de legătură între provincii și orașe, ceea ce poate fi cauzat de faptul că valoarea inițială a articolului din meniul derulant este atribuită paginii aspx, iar eroarea apare când evenimentul este postat, valoarea inițială a elementului din meniul derulant este ștearsă, iar elementul este adăugat la evenimentul asociat. 4.2 Motivul este că proprietatea Value a ListItem a controlului DropDownList conține caractere chinezești. Doar schimbă valoarea în engleză sau un număr. Este cel mai bine să adaugi următoarea afirmație în web.config: <globalization requestEncoding="utf-8" responseEncoding="utf-8" culture="zh-CN" uiCulture="zh-CN"/> Deoarece POSTBACK nu este codificat în UTF-8, eliminarea lui t a JAVAscrip va fi considerată problematică. Doar schimbă requestEncoding="utf-8" în ea, dar responseEncoding="utf-8" nu
5. Înregistrarea pentru validarea evenimentului Principiul este să asp.net lăsăm să înregistreze această valoare de întoarcere. RegisterForEventValidation trebuie apelat la randare.
|