Kalbant apie "Gridview" valdiklio naudojimą tame pačiame puslapyje, nustatyta, kad serveris negali atsakyti į atnaujinimo įvykį, atrodo, kad jo klaidos pavojaus signalas ir tada užklausia tam tikros informacijos, o dabar sprendimas apibendrinamas taip: Spustelėkite atnaujinimo įvykis negali atsakyti, nes atgalinio arba atgalinio iškvietimo parametras yra netinkamas. Įvykių tikrinimas įgalintas konfigūracijoje su <pages enableEventValidation="true"/> arba <%@ Page EnableEventValidation="true" %> puslapiuose. Saugumo sumetimais ši funkcija patikrina, ar atgalinio iškvietimo arba atgalinio iškvietimo įvykių parametrai yra kilę iš serverio valdiklio, kuris juos iš pradžių atvaizdavo. Jei duomenys yra teisingi ir laukiami, naudokite Clientscrip, kad pašalintumėte metodą tManager.RegisterForEventValidation, kad užregistruotumėte atgalinio iškvietimo arba atgalinio iškvietimo duomenis tikrinimui.
Aprašas: vykdant dabartinę žiniatinklio užklausą įvyko neapdorota išimtis. Patikrinkite rietuvės sekimo informaciją, kad gautumėte išsamios informacijos apie klaidą ir iš kur ji atsirado kode, kuris sukėlė klaidą.
Išsami išimties informacija: System.ArgumentException: neleistini atgalinio iškvietimo arba atgalinio iškvietimo parametrai. Įvykių tikrinimas įgalintas konfigūracijoje su < puslapiais enableEventValidation="true"/> arba <% @ Page EnableEventValidation="true" %> puslapiuose. Saugumo sumetimais ši funkcija patikrina, ar atgalinio iškvietimo arba atgalinio iškvietimo įvykio parametrai yra kilę iš serverio valdiklio, kuris juos iš pradžių atvaizdavo. Jei duomenys yra teisingi ir laukiami, naudokite Clientscrip, kad pašalintumėte metodą tManager.RegisterForEventValidation, kad užregistruotumėte atgalinio iškvietimo arba atgalinio iškvietimo duomenis tikrinimui. Ilgai žiūrėjęs, neradau jokių problemų ir buvo teisinga dar kartą patikrinti kodą, patikrinau visų puslapio valdiklių ID ir atributus ir vis tiek neradau problemos. Vėliau sužinojau, kad taip atsitiko: Atsiradimo sąlygos: 1. Ekrane yra paslėpti valdikliai. 2. Keli "Gridview" susiejimai. 3. Įdėta keliomis formomis. Atsiradimo priežastys: . .NET sugeneruoja __EVENTVALIDATION paslėptą lauką paskutiniame puslapyje pagal puslapio išvesties elementus. Buvo atliktas paprastas testas. Sukurkite <asp: button id="btnSubmit" runat="server" text="Submit" tooltip="Submit" /> ir sukurkite atitinkamą Click įvykio apdorojimo programą. Paleiskite programą ir teisingai reaguokite į įvykį. Tada nustatykite btnSubmit.Visable=false ir rankiniu būdu puslapyje pridėkite <input type="submit" name="btnSubmit" value="Submit" />. Paleiskite programą ir bus rodoma išimtis su EnableEventValidation turiniu. Nustatykite <@Page EnableEventValidation="false" > paleiskite programą dar kartą, kad ji tinkamai reaguotų į įvykį. Stebint dviejų __EVENTVALIDATION turinį prieš ir po, galima pastebėti, kad jie skiriasi. Kalbant apie atsirandančią išimtį, galima manyti, kad btnSubmit nėra įtrauktas į išvestį, tačiau kai jis pateikiamas fone, yra atitinkamas turinys, kuris yra nenuoseklus, todėl įjungto įvykio patvirtinimo atveju. .NET pateikia išimtį.
1 sprendimas: Page_Load(objekto siuntėjas, EventArgs e)
{ jei (! Page.IsPostBack) { susieti duomenis; }
} 2 sprendimas: <puslapiai enableEventValidation="false"/> 1. Pridėkite EnableEventValidation="false" prie puslapio <%@ Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> puslapio. (Visų pirma)
2. Eikite per web.config <system.web> <puslapiai enableEventValidation="false"/>
3. Tai formos lizdas, puslapyje gali būti tik viena forma, kurią galima išspręsti atidžiai patikrinus kodą.
4. Jei puslapyje yra valdiklių, tokių kaip "DropDownList" arba "ListBox", tai gali būti dėl šių priežasčių:
4.1 Naudojant ajax išskleidžiamajame meniu dažniausiai randama provincijos ir miesto susiejimo meniu, kuris gali būti dėl to, kad pradinė elemento reikšmė išskleidžiamajame meniu yra priskirta aspx puslapyje, ir klaida yra paraginta, kai įvykis yra paskelbtas, ir pradinė elemento reikšmė išskleidžiamajame meniu yra ištrinta, ir elementas elementas pridedamas prie susieto įvykio. 4.2 Priežastis ta, kad valdiklio DropDownList ypatybėje ListItem yra kinų kalbos simbolių. Tiesiog pakeiskite reikšmę į anglų arba skaičių. Geriausia į web.config pridėti šį teiginį: <globalization requestEncoding="utf-8" responseEncoding="utf-8" culture="zh-CN" uiCulture="zh-CN"/> Kadangi POSTBACK nėra užkoduotas UTF-8, JAVAscrip pašalinimas bus laikomas problematišku. Tiesiog pakeiskite requestEncoding="utf-8" į jį, bet responseEncoding="utf-8" ne
5. Registruokitės įvykio patvirtinimui Principas yra leisti asp.net įrašyti šią atgalinę vertę. RegistrForEventValidation turi būti iškviestas generuojant.
|