Samalla sivulla Gridview-ohjauksen käytöstä havaittiin, että palvelin ei pysty vastaamaan päivitystapahtumaan, näyttää siltä, että se on virhehälytys ja sitten kyselee tietoja, ja nyt ratkaisu tiivistetään seuraavasti: Klikkaa, päivitystapahtuma ei voi vastata, koska postback- tai callback-parametri on virheellinen. Tapahtuman validointi on käytössä konfiguraatiossa <pages enableEventValidation="true"/> tai <%@ Page EnableEventValidation="true" %> sivuilla. Turvallisuussyistä tämä ominaisuus varmistaa, että postback- tai callback-tapahtumien parametrit ovat peräisin palvelimen ohjauksesta, joka ne alun perin renderöi. Jos data on kelvollista ja odotettua, käytä Clientscrip-menetelmää poistaaksesi tManager.RegisterForEventValidation-menetelmän postback- tai callback-tietojen rekisteröimiseksi validointia varten.
Kuvaus: Käsittelemätön poikkeus tapahtui nykyisen verkkopyynnön suorittamisen aikana. Tarkista pinon jäljityksen tiedot virheestä ja siitä, mistä koodisi virheen aiheutti.
Poikkeustiedot: System.ArgumentException: Virheelliset palautus- tai callback-parametrit. Tapahtuman validointi on käytössä konfiguraatiossa, jossa < sivua enableEventValidation="true"/> tai <% @ Page EnableEventValidation="true" %> sivuilla. Turvallisuussyistä tämä ominaisuus varmistaa, että postback- tai callback-tapahtuman parametrit ovat peräisin palvelimen ohjauksesta, joka ne alun perin renderöi. Jos data on kelvollista ja odotettua, käytä Clientscrip-menetelmää poistaaksesi tManager.RegisterForEventValidation-menetelmän postback- tai callback-tietojen rekisteröimiseksi validointia varten. Pitkän tarkastelun jälkeen en löytänyt mitään ongelmaa, ja oli oikein tarkistaa koodi uudelleen, ja tarkistin kaikkien sivun kontrollien ID:t ja attribuutit, mutta en silti löytänyt ongelmaa. Myöhemmin sain tietää, että näin kävi: Esiintymisolosuhteet: 1. Näytöllä on piilotettuja ohjaimia. 2. Useita Gridview-sidoksia. 3. Sisäkkäinen useissa muodoissa. Esiintymisen syyt: . .NET generoi __EVENTVALIDATION piilotetun kentän viimeiselle sivulle sivun tuloselementtien perusteella. Tehtiin yksinkertainen testi. Luo <asp: button id="btnSubmit" runat="server" text="Submit" tooltip="Submit" /> ja luo vastaava Click-tapahtumankäsittelijä. Suorita ohjelma ja reagoi tapahtumaan oikein. Aseta sitten btnSubmit.Visable=false ja lisää manuaalisesti <input type="submit" name="btnSubmit" value="Submit" /> sivulle. Kun ohjelma käynnistyy, poikkeus ilmestyy EnableEventValidation-sisällön yhteydessä. Aseta <@Page EnableEventValidation="false" > aja ohjelma uudelleen vastaamaan tapahtumaan oikein. Kun tarkastellaan kahden ennen ja jälkeen __EVENTVALIDATION sisältöä, voidaan havaita, että ne ovat erilaisia. Poikkeuksen osalta voidaan katsoa, että btnSubmit ei ole mukana tulosteessa, mutta kun se lähetetään taustalle, on vastaavaa sisältöä, joka on epäjohdonmukaista, joten tapahtuman varmistuksessa on käytössä. .NET heittää poikkeuksen.
Ratkaisu 1: Page_Load(objektin lähettäjä, EventArgs e)
{ jos (! Page.IsPostBack) { sitoa dataa; }
} Ratkaisu 2: <sivut enableEventValidation="false"/> 1. Lisää EnableEventValidation="false" sivun <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" inherits="_Default" %> sivulta. (Ensinnäkin)
2. Käy läpi web.config <system.web> <sivut enableEventValidation="false"/>
3. Kyseessä on Form nesting, sivulla voi olla vain yksi Form, joka voidaan ratkaista tarkistamalla koodi huolellisesti.
4. Jos sivulla on ohjaimia, kuten DropDownList tai ListBox, syy voi johtua seuraavista:
4.1 Ajaxin käyttö pudotusvalikossa löytyy yleisesti provinssin ja kaupungin linkitysvalikosta, mikä voi johtua siitä, että pudotusvalikon alkuperäinen kohdearvo on määritetty aspx-sivulle, ja virhe ilmenee, kun tapahtuma julkaistaan, ja pudotusvalikon alkuperäinen kohdearvo poistetaan ja esine lisätään sidottuun tapahtumaan. 4.2 Syynä on se, että DropDownList-kontrollin ListIt-ominaisuuden Value-ominaisuus sisältää kiinalaisia merkkejä. Vaihda vain arvo englanniksi tai numeroksi. On parasta lisätä seuraava lause web.config-tiedostoon: <globalization requestEncoding="utf-8" responseEncoding="utf-8" culture="zh-CN" uiCulture="zh-CN"/> Koska POSTBACK ei ole koodattu UTF-8:aan, JAVAscripin t:n poistaminen katsotaan ongelmalliseksi. Vaihda vain requestEncoding="utf-8" siihen, mutta responseEncoding="utf-8" ei muuta
5. Rekisteröidy tapahtuman validointiin Periaate on antaa asp.net kirjata tämä palautusarvo. RegisterForEventValidation täytyy kutsua renderöinnissä.
|