Αυτό το άρθρο είναι ένα άρθρο καθρέφτη της αυτόματης μετάφρασης, κάντε κλικ εδώ για να μεταβείτε στο αρχικό άρθρο.

Άποψη: 17049|Απάντηση: 2

[ASP.NET] System.ArgumentException: 回发或回调参数无效。在配置中使用 < pages enableEven

[Αντιγραφή συνδέσμου]
Δημοσιεύτηκε στις 21/4/2015 3:56:12 μ.μ. | | |
Όσον αφορά τη χρήση του στοιχείου ελέγχου Gridview στην ίδια σελίδα, διαπιστώθηκε ότι το συμβάν ενημέρωσης δεν μπορεί να απαντηθεί από τον διακομιστή, φαίνεται ότι ο συναγερμός σφάλματος και στη συνέχεια ζητά κάποιες πληροφορίες και τώρα η λύση συνοψίζεται ως εξής: Κάντε κλικ στο συμβάν ενημέρωσης δεν μπορεί να ανταποκριθεί επειδή η παράμετρος επιστροφής ή επανάκλησης δεν είναι έγκυρη. Η επικύρωση συμβάντος είναι ενεργοποιημένη στη διαμόρφωση με <pages enableEventValidation="true"/> ή <%@ Page EnableEventValidation="true" %> στις σελίδες. Για λόγους ασφαλείας, αυτή η δυνατότητα επαληθεύει ότι οι παράμετροι των συμβάντων επιστροφής δεδομένων ή επανάκλησης προέρχονται από το στοιχείο ελέγχου διακομιστή που τα απέδιδε αρχικά. Εάν τα δεδομένα είναι έγκυρα και αναμενόμενα, χρησιμοποιήστε το Clientscrip για να καταργήσετε τη μέθοδο tManager.RegisterForEventValidation για να καταχωρήσετε δεδομένα επιστροφής δεδομένων ή επιστροφής κλήσεων για επικύρωση.
Περιγραφή: Παρουσιάστηκε μια ανεπίλυτη εξαίρεση κατά την εκτέλεση της τρέχουσας αίτησης web. Ελέγξτε τις πληροφορίες ανίχνευσης στοίβας για λεπτομέρειες σχετικά με το σφάλμα και από πού προήλθε στον κώδικά σας που προκάλεσε το σφάλμα.
         Λεπτομέρειες εξαίρεσης: System.ArgumentException: Μη έγκυρες παράμετροι επιστροφής δεδομένων ή επιστροφής κλήσης. Η επικύρωση συμβάντος είναι ενεργοποιημένη στη διαμόρφωση με < σελίδες enableEventValidation="true"/> ή <% @ Page EnableEventValidation="true" %> στις σελίδες. Για λόγους ασφαλείας, αυτή η δυνατότητα επαληθεύει ότι οι παράμετροι του συμβάντος επιστροφής δεδομένων ή επανάκλησης προέρχονται από το στοιχείο ελέγχου διακομιστή που τις απέδιδε αρχικά. Εάν τα δεδομένα είναι έγκυρα και αναμενόμενα, χρησιμοποιήστε το Clientscrip για να καταργήσετε τη μέθοδο tManager.RegisterForEventValidation για να καταχωρήσετε δεδομένα επιστροφής δεδομένων ή επιστροφής κλήσεων για επικύρωση.

       Αφού το κοίταξα για πολλή ώρα, δεν βρήκα κανένα πρόβλημα και ήταν σωστό να ελέγξω ξανά τον κωδικό και έλεγξα τα αναγνωριστικά και τα χαρακτηριστικά όλων των στοιχείων ελέγχου στη σελίδα και πάλι δεν βρήκα το πρόβλημα. Αργότερα, ανακάλυψα ότι αυτό συνέβη:

Συνθήκες εμφάνισης:
1. Υπάρχουν κρυφά χειριστήρια στην οθόνη.
2. Πολλαπλές συνδέσεις Gridview.

3. Ένθετο σε πολλαπλές μορφές.
Αιτίες εμφάνισης:
. Το .NET δημιουργεί ένα κρυφό πεδίο __EVENTVALIDATION στην τελική σελίδα με βάση τα στοιχεία εξόδου στη σελίδα. Έγινε ένα απλό τεστ. Δημιουργήστε ένα <asp: button id="btnSubmit" runat="server" text="Submit" tooltip="Submit" /> και δημιουργήστε το αντίστοιχο πρόγραμμα χειρισμού συμβάντων κλικ. Εκτελέστε το πρόγραμμα και απαντήστε σωστά στο συμβάν. Στη συνέχεια, ορίστε btnSubmit.Visable=false και προσθέστε χειροκίνητα <input type="submit" name="btnSubmit" value="Submit" /> στη σελίδα. Εκτελέστε το πρόγραμμα και θα εμφανιστεί μια εξαίρεση με το περιεχόμενο EnableEventValidation. Ορίστε <@Page EnableEventValidation="false" > εκτελέσετε ξανά το πρόγραμμα για να ανταποκριθείτε σωστά στο συμβάν. Παρατηρώντας το περιεχόμενο των δύο __EVENTVALIDATION πριν και μετά, μπορεί να διαπιστωθεί ότι είναι διαφορετικά. Όσον αφορά την εξαίρεση που προκύπτει, μπορεί να θεωρηθεί ότι το btnSubmit δεν περιλαμβάνεται στην έξοδο, αλλά όταν υποβάλλεται στο παρασκήνιο, υπάρχει αντίστοιχο περιεχόμενο, το οποίο είναι ασυνεπές, οπότε στην περίπτωση της επαλήθευσης συμβάντος είναι ενεργοποιημένη. Το .NET κάνει μια εξαίρεση.

Λύση 1:
Page_Load(αποστολέας αντικειμένου, EventArgs e)
{
    αν (! Page.IsPostBack)
    {
        σύνδεση δεδομένων?
    }
}
Λύση 2:
<σελίδες enableEventValidation="false"/>

1. Προσθέστε το EnableEventValidation="false" στη σελίδα <%@ Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> της σελίδας. (Πρώτα απ' όλα)

2. Μεταβείτε στο web.config
<system.web>
<σελίδες enableEventValidation="false"/>

3. Είναι ένθεση φόρμας, μια σελίδα μπορεί να έχει μόνο μία φόρμα, η οποία μπορεί να λυθεί ελέγχοντας προσεκτικά τον κώδικα.

4. Εάν η σελίδα περιέχει στοιχεία ελέγχου όπως DropDownList ή ListBox, αυτό μπορεί να οφείλεται στους ακόλουθους λόγους:

4.1 Η χρήση ajax στο αναπτυσσόμενο μενού βρίσκεται συνήθως στο μενού σύνδεσης επαρχίας και πόλης, κάτι που μπορεί να οφείλεται στο γεγονός ότι η αρχική τιμή στοιχείου του αναπτυσσόμενου μενού έχει εκχωρηθεί στη σελίδα aspx και το σφάλμα ζητείται όταν δημοσιεύεται το συμβάν και η αρχική τιμή στοιχείου του αναπτυσσόμενου μενού διαγράφεται και το στοιχείο προστίθεται στο δεσμευμένο συμβάν.
4.2 Ο λόγος είναι ότι η ιδιότητα Value του στοιχείου ελέγχου ListItem του στοιχείου ελέγχου DropDownList περιέχει κινεζικούς χαρακτήρες. Απλώς αλλάξτε την τιμή σε Αγγλικά ή σε αριθμό. Είναι καλύτερο να προσθέσετε την ακόλουθη δήλωση στο web.config:
<globalization requestEncoding="utf-8" responseEncoding="utf-8" culture="zh-CN" uiCulture="zh-CN"/> Επειδή το POSTBACK δεν είναι κωδικοποιημένο σε UTF-8, η αφαίρεση του t από το JAVAscrip θα θεωρηθεί προβληματική.
Απλώς αλλάξτε το requestEncoding="utf-8" σε αυτό, αλλά το responseEncoding="utf-8" δεν το κάνει

5.Εγγραφείτε για επικύρωση συμβάντος
Η αρχή είναι να asp.net αφήσουμε να καταγράψουμε αυτήν την τιμή επιστροφής δεδομένων.
Το RegisterForEventValidation πρέπει να κληθεί στην απόδοση.






Προηγούμενος:Απαγορεύτηκε στο Tianhe-2 να αγοράζει εμπιστευτικές πληροφορίες: Οι Ηνωμένες Πολιτείες ζηλεύουν την υπερυπολογιστική ισχύ της Κίνας
Επόμενος:Επαγγελματισμός "Πρότυπο Σχεδίου Καριέρας"
 Σπιτονοικοκύρης| Δημοσιεύτηκε στις 22/4/2015 10:36:18 π.μ. |
  1. <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="test1.aspx.cs" Inherits="WebApplication1.test1" enableEventValidation="false" %>
Αντιγραφή κώδικα


Δημοσιεύτηκε στις 22/4/2015 10:40:46 π.μ. |
Συμφωνώ με το σημείο στον επάνω όροφο ότι το EnableEventValidation="true" θα επικυρώσει τοπικά και θα καταναλώσει CPU. Το EnableEventValidation="false" θα επιστρέψει την επικύρωση διακομιστή και θα φορτώσει ξανά τη σελίδα.
Αποκήρυξη:
Όλο το λογισμικό, το υλικό προγραμματισμού ή τα άρθρα που δημοσιεύονται από το Code Farmer Network προορίζονται μόνο για μαθησιακούς και ερευνητικούς σκοπούς. Το παραπάνω περιεχόμενο δεν θα χρησιμοποιηθεί για εμπορικούς ή παράνομους σκοπούς, άλλως οι χρήστες θα υποστούν όλες τις συνέπειες. Οι πληροφορίες σε αυτόν τον ιστότοπο προέρχονται από το Διαδίκτυο και οι διαφορές πνευματικών δικαιωμάτων δεν έχουν καμία σχέση με αυτόν τον ιστότοπο. Πρέπει να διαγράψετε εντελώς το παραπάνω περιεχόμενο από τον υπολογιστή σας εντός 24 ωρών από τη λήψη. Εάν σας αρέσει το πρόγραμμα, υποστηρίξτε γνήσιο λογισμικό, αγοράστε εγγραφή και λάβετε καλύτερες γνήσιες υπηρεσίες. Εάν υπάρχει οποιαδήποτε παραβίαση, επικοινωνήστε μαζί μας μέσω email.

Mail To:help@itsvse.com