Argomento postback o callback non valido. La convalida dell'evento è abilitata usando '<pages enableEventValidation = “true” />'


238

Ricevo il seguente errore quando riporto una pagina dal lato client. Ho un codice JavaScript che modifica un asp: ListBox sul lato client.

come lo aggiustiamo?

Dettagli errore di seguito:

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

Non eseguire un databind nell'evento page_load.
Paul Zahra,

Risposte:


171

Il problema è che ASP.NET non viene a conoscenza di questo elenco extra o rimosso. Hai un numero di opzioni (elencate di seguito):

  • Disabilita eventvalidation (cattiva idea, perché perdi un po 'di sicurezza che ha un costo molto basso).
  • Utilizzare ASP.NET Ajax UpdatePanel. (Metti la casella di riepilogo nel Pannello di aggiornamento e attiva un aggiornamento, se aggiungi o rimuovi la casella di riepilogo. In questo modo viewstate e i campi correlati ottengono aggiornamenti e passerà la convalida dell'evento.)
  • Dimentica il lato client e utilizza il postback classico e aggiungi o rimuovi gli elenchi dal lato server.

Spero che aiuti.


Un'altra opzione: implementa IPostBackEventHandler e chiama js __doPostBack ('<% = UniqueId.ToString ()%>', arg)
gdbdable

Sulla base dei suggerimenti precedenti, ho inserito i miei menu a discesa in un normale ASP.NET asp: UpdatePanel, ho caricato i menu a discesa nel codice dietro e poi upNewRecord.Update ();
Ricardo Appleton,

183

Hai dei codici negli eventi Page_Load? se sì, forse aggiungendo quanto segue sarà di aiuto.

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

Questo errore viene generato quando si fa clic sul comando e il Page_load viene eseguito di nuovo, in un normale ciclo di vita sarà Page_Load -> Fare clic su Command -> Page_Load (di nuovo) -> Elabora evento ItemCommand


7
aha! Grazie mille, questo è stato il trucco nel mio caso! Ho ricaricato un elenco a discesa nel pageload, e quindi il framework ha perso il controllo degli oggetti (i nuovi) nel ddl, e quello su cui ho cliccato (che non esisteva più)
Michel

Ho avuto lo stesso errore dell'OP ... Stavo usando una procedura guidata nel mio modulo e stavo chiamando il passaggio 0 nel mio caricamento della pagina. rimosso e il problema è scomparso. Grazie ...
dal

Grazie mille per questa risposta ... Ho avuto lo stesso problema e ho scoperto che avevo appena dimenticato di ignorare i postback durante il caricamento dei dati nella mia griglia ... risparmiami un sacco di tempo
Quagmire

10
Duh! Tornare ai moduli web da MVC è una seccatura. Questa è la risposta corretta
Vishnoo Rath,

2
L'ho fatto, ma non ha funzionato per me perché c'è un codice che devo eseguire nell'evento page_load per quando non è un postback e quindi ho ancora lo stesso errore. La disabilitazione del viewstate per il mio ripetitore ha invece risolto il problema.
Bryan,

40

Ho avuto un'esperienza con DataGrid. Una delle sue colonne era il pulsante "Seleziona". Quando facevo clic sul pulsante "Seleziona" di qualsiasi riga avevo ricevuto questo messaggio di errore:

"Argomento postback o callback non valido. La convalida dell'evento è abilitata utilizzando nella configurazione o <% @ Page EnableEventValidation =" true "%> in una pagina. Per motivi di sicurezza, questa funzione verifica che gli argomenti relativi agli eventi postback o callback provengano dal controllo server che originariamente resi. Se i dati sono validi e previsti, utilizzare il metodo ClientScriptManager.RegisterForEventValidation per registrare i dati di postback o callback per la convalida. "

Ho cambiato diversi codici e alla fine ci sono riuscito. Percorso della mia esperienza:

1) Ho cambiato l'attributo della pagina in EnableEventValidation="false". Ma non ha funzionato. (non solo è pericoloso per motivi di sicurezza, il mio gestore di eventi non è stato chiamato:void Grid_SelectedIndexChanged(object sender, EventArgs e)

2) Ho implementato il ClientScript.RegisterForEventValidationmetodo Render. Ma non ha funzionato.

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) Ho cambiato il mio tipo di pulsante nella colonna della griglia da PushButtona LinkButton. Ha funzionato! ("ButtonType =" LinkButton "). Penso che se puoi cambiare il tuo pulsante con altri controlli come" LinkButton "in altri casi, funzionerebbe correttamente.


1
La mia soluzione era quella di rinunciare ai pulsanti di annidamento all'interno del datagrid. La SM mi fallisce ancora una volta.
Jacobs Data Solutions,

La tua soluzione funziona anche per me. Grazie. Ma voglio sapere perché Buttonnon funziona quando linkButtonsi lavora con lo stesso programma. Se è così, dovremmo sempre usare linkButton? Come potremmo rendere più flessibile?
Frank Myat Gio

8
Tenta di aggiungere al pulsante UseSubmitBehavior = "false" stackoverflow.com/questions/2968525/...
JJschk

Awesomeeeeeee :) .. Si può imparare questo solo per esperienza .. Hai dimostrato reale scenerio tat spettacoli esperienza è migliore insegnante .. Grande ans e la spiegazione!
saun4frsh,

Nell'override di Render DEVI METTERE base.Render (sceneggiatore); alla fine ... altrimenti non funzionerà!
Paul Zahra,

28

Avrai davvero voglia di fare 2 o 3, non disabilitare la convalida dell'evento.

Esistono due problemi principali con l'aggiunta di elementi a un asp: lato client casella di riepilogo.

  • Il primo è che interferisce con la convalida dell'evento. Ciò che è tornato al server non è quello che ha inviato.

  • Il secondo è che anche se si disabilita la convalida dell'evento, quando la pagina viene posticipata, gli elementi nella casella di riepilogo verranno ricostruiti dal viewstate, quindi tutte le modifiche apportate sul client andranno perse. La ragione di ciò è che un asp.net non si aspetta che il contenuto di una casella di riepilogo venga modificato sul client, si aspetta solo che venga effettuata una selezione, quindi scarta tutte le modifiche che potresti aver apportato.

È molto probabile che l'opzione migliore utilizzi un pannello di aggiornamento, come è stato raccomandato. Un'altra opzione, se hai davvero bisogno di fare questo lato client, è usare un semplice vecchio <select>invece di un <asp:ListBox>, e mantenere la tua lista di elementi in un campo nascosto. Quando il rendering della pagina sul client è possibile popolarlo da una divisione del contenuto del campo di testo.

Quindi, quando sei pronto per pubblicarlo, ripopoli i contenuti del campo nascosto da quelli modificati <select>. Quindi, ovviamente, devi dividerlo di nuovo sul server e fare qualcosa con i tuoi oggetti, poiché la tua selezione è vuota ora che è di nuovo sul server.

Tutto sommato è una soluzione piuttosto ingombrante che non consiglierei davvero, ma se devi davvero fare modifiche sul lato client di un listBox, funziona. Consiglio vivamente di consultare un updatePanel prima di percorrere questa strada, comunque.


3
c, non è necessario mantenere gli elementi selezionati in un campo nascosto, se si effettua la casella di selezione runat = "server" è possibile leggere il valore di ritorno pubblicato da Request.Form [ selectid .UnqiueID]. E se vengono selezionati multipli, il browser pubblica i valori come CSV. Notare che gli elementi e le proprietàexexex del controllo saranno errati sul server poiché è stata modificata la lista itr sul client di cui il server non è a conoscenza.
Michael,

Michael, ha funzionato. finché aggiungi "multiple = true", altrimenti ti darà solo 1 valore. Grazie
Sameer Alibhai il

1
Aveva lo stesso problema per un elenco a discesa con caratteri di nuova riga. Il passaggio a una selezione ha funzionato perfettamente. Grazie!
thchaver,

Ho usato semplicemente vecchio <select>, che ha risolto il problema. Potete per favore dirmi perché Updatepanel sta impiegando molto tempo a caricare i dati rispetto al caricamento dei dati ajax sul lato client.?
Pranesh Janarthanan,

17

Ho avuto lo stesso problema con un ripetitore perché avevo una pagina Web con un controllo Repeater in un sito Web in cui EnableEventValidation era attivato. Non era buono Stavo ottenendo eccezioni relative al postback non valide.

Ciò che ha funzionato per me è stato impostare EnableViewState = "false" per il ripetitore. I vantaggi sono che è più semplice da usare, semplice come disattivare la convalida degli eventi per il sito Web o la pagina Web, ma l'ambito è molto meno che disattivare la convalida degli eventi per entrambi.


3
Ho avuto questo esatto problema con un controllo web legacy. La nostra piattaforma web / CMS (sitecore) ha ottenuto un grande aggiornamento che ha attivato la convalida dell'evento (era stata precedentemente disattivata! Ahi!). Il controllo del ripetitore stava visualizzando le immagini in una galleria web (con pulsanti per riorganizzarle) e al postback di questi pulsanti si sarebbe verificata un'eccezione. Ho disabilitato lo stato di visualizzazione sui ripetitori usando EnableViewState = "false" come hai suggerito e hey presto ha funzionato. Come altri hanno scoperto, Overriding Render () e l'utilizzo di ClientScriptManager.RegisterForEventValidation () non ha funzionato per me. GRAZIE!
xan,

Come @xan uso anche Sitecore e questo è esattamente ciò di cui avevo bisogno.
wilsjd,

Questo ha funzionato anche per me. Anche il pannello di aggiornamento AJAX avrebbe funzionato, ma era sovraccarico di cui non avevo bisogno nel caso, quindi grazie Umar Farooq Khawaja.
Bryan,

17

Nessuna delle precedenti ha funzionato per me. Dopo ulteriori approfondimenti mi sono reso conto di aver trascurato 2 moduli applicati sulla pagina che causava il problema.

<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>

Tenere presente che recentemente ASP.NET ha iniziato a considerare iframe all'interno di un tag modulo che contiene un tag modulo nel documento iframe stesso come frame nidificato. Ho dovuto spostare l'iframe dal tag del modulo per evitare questo errore.


12

Ho avuto lo stesso problema durante la modifica di un ListBox utilizzando JavaScript sul client. Si verifica quando si aggiungono nuovi elementi a ListBox dal client che non erano presenti al momento del rendering della pagina.

La correzione che ho trovato è quella di informare il sistema di convalida dell'evento di tutti i possibili elementi validi che possono essere aggiunti dal client. Puoi farlo sovrascrivendo Page.Render e chiamando Page.ClientScript.RegisterForEventValidation per ciascun valore che il tuo JavaScript potrebbe aggiungere alla casella di riepilogo:

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

Questo può essere un po 'una seccatura se hai un gran numero di valori potenzialmente validi per la casella di riepilogo. Nel mio caso stavo spostando gli elementi tra due ListBox - uno che aveva tutti i possibili valori e un altro che inizialmente era vuoto ma veniva riempito con un sottoinsieme dei valori dal primo in JavaScript quando l'utente fa clic su un pulsante. In questo caso devi solo scorrere gli elementi nel primo ListBox e registrarli ciascuno con la seconda casella di riepilogo:

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

9

Un altro modo non menzionato qui è la sottoclasse ListBox

Vale a dire.

public class ListBoxNoEventValidation : ListBox 
{
}

ClientEventValidation disattiva l'attributo System.Web.UI.SupportsEventValidation se lo esegui in una sottoclasse, a meno che non lo ricolleghi esplicitamente, non chiamerà mai la routine di convalida. Funziona con qualsiasi controllo ed è l'unico modo che ho trovato per "disabilitarlo" su un controllo in base al controllo (vale a dire, non a livello di pagina).


2
Qui ben descritto .
Pavel Hodek,

1
Penso che il modo migliore per affrontare sia farlo. Dovremmo risolverlo a livello di controllo piuttosto che a livello di pagina e rischiare la sicurezza di tutti i controlli coinvolti +1 e grazie per @PavelHodek per quel link.
James Poulose,

Sfortunatamente, sembra che se lo fai, tutti gli elementi dell'elenco aggiunti sul client non verranno riconosciuti se sono elementi selezionati quando la pagina viene posticipata.
Jonathan Wood,

9

provi qualcosa del genere, nella tua pagina aspx

Inserisci

EnableEventValidation = "false"

ti senti libero di porre qualsiasi domanda!


Direi se disabilitare l'offerta di convalida del build-in dal framework per smettere di vedere l'errore sarebbe la soluzione più appropriata in questo caso.
Jviaches,

8

Se compili l'elenco a discesa tramite lo script lato client, cancella l'elenco prima di inviare il modulo al server; quindi ASP.NET non si lamenterà e la sicurezza sarà ancora attiva.

E per ottenere i dati selezionati dal DDL, è possibile collegare un evento "OnChange" al DDL per raccogliere il valore in un input nascosto o in una casella di testo con Style = "display: none;"


+1 Facile da implementare. Potrebbe non essere il più pulito, ma abbastanza facile.
Nutch

7

3: ho cambiato il mio tipo di pulsante nella colonna della griglia da "PushButton" a "LinkButton". Ha funzionato! ("ButtonType =" LinkButton ") Penso che se puoi cambiare il tuo pulsante con altri controlli come" LinkButton "in altri casi, funzionerebbe correttamente.

Vorrei poterti votare, Amir (purtroppo il mio rappresentante è troppo basso.) Stavo avendo questo problema e cambiarlo ha funzionato come un campione sulla mia griglia. Solo un po 'a parte, penso che il codice valido sia: ButtonType = "Link"

Ho il sospetto che ciò sia dovuto al fatto che quando fai clic su "modifica", la modifica diventa "aggiorna" e "annulla", che poi torna a "modifica" al momento dell'invio. E questi controlli di spostamento rendono .net a disagio.


Il punto cruciale di questo problema è il modello di eventvalidation asp.net e se la "pagina" viene modificata dal client nel momento in cui si fa un post. Che cosa intendi con "..... E questi controlli di spostamento rendono inquieti .net" ??
Giulio

7

(1) EnableEventValidation = "false" ................... Non funziona per me.

(2) ClientScript.RegisterForEventValidation .... Non funziona per me.

Soluzione 1:

Cambia Button / ImageButton in LinkButton in GridView. Funziona. (Ma mi piace ImageButton)

Ricerca: Button / ImageButton e LinkButton utilizzano diversi metodi per postback

Articolo originale:

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

Soluzione 2:

In OnInit (), inserisci il codice in questo modo per impostare un ID univoco per Button / ImageButton:

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();           
  }
}

Articolo originale:

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


6

Ho implementato una visualizzazione a griglia nidificata e ho riscontrato lo stesso problema. Ho usato LinkButton anziché il pulsante immagine in questo modo:

prima avevo una colonna come questa:

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

Ho sostituito in questo modo.

<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

Ho avuto un problema simile, ma non stavo usando ASP.Net 1.1 né aggiornando un controllo tramite JavaScript. Il mio problema si è verificato solo su Firefox e non su IE (!).

Ho aggiunto opzioni a un elenco a discesa sull'evento PreRender in questo modo:

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);

Il mio "HF" (campo nascosto) aveva le opzioni separate dalla nuova riga, in questo modo:

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

Il problema era che la pagina HTML era spezzata (intendo dire aveva delle righe) sulle opzioni della "selezione" che rappresentava il DropDown.

Quindi ho risolto il mio problema aggiungendo una riga:

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);

Spero che questo aiuti qualcuno.


4

se si cambia UseSubmitBehavior="True" per UseSubmitBehavior="False"il vostro problema sarà risolto

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

Non ha funzionato per me. Sto usando un pulsante immagine, però, e in una tabella in un ripetitore, quindi non è esattamente la stessa situazione. Disabilitare il viewstate del ripetitore ha funzionato per me.
Bryan,

3

Ho avuto lo stesso problema, quello che ho fatto:

Ho appena aggiunto una condizione if(!IsPostBack)e funziona bene :)


3

Questo errore verrà visualizzato senza postback

Aggiungi codice:

If(!IsPostBack){

 //do something

}

2

In questo caso aggiungi id al pulsante in RowDataBound della griglia. Risolverà il tuo problema.


2

Una soluzione semplice per questo problema è utilizzare il controllo IsPostBack sul caricamento della pagina. Questo risolverà questo problema.


2

Ajax UpdatePanel ce la fa e penso che sia il modo più semplice, ignorando le spese generali di postback dell'Ajax .


2

So che questo è un post molto vecchio. Supponendo che tu stia chiamando nella tua applicazione, ecco un'idea che ha funzionato per me:

  1. Implementa ICallbackEventHandler sulla tua pagina
  2. Chiamare ClientScriptManager.GetCallbackEventReference per chiamare il codice lato server
  3. Come indicato dal messaggio di errore, è possibile quindi chiamare ClientScriptManager.RegisterForEventValidation

Se non hai bisogno del controllo totale, puoi utilizzare un pannello di aggiornamento che lo farebbe per te.


2

Abbiamo riscontrato questo stesso problema durante la conversione delle nostre normali pagine ASPX in pagine di contenuti.

La pagina con questo problema aveva un </form>tag all'interno di una delle sezioni Contenuto, quindi due tag di fine modulo sono stati resi in fase di esecuzione che hanno causato questo problema. La rimozione del tag di fine modulo aggiuntivo dalla pagina ha risolto questo problema.


Grazie, ho scoperto che avevo anche dei <form>campi extra nel mio codice.
Eric Kigathi,

2

Se si utilizza gridview e non si associa gridview a pageload all'interno! Ispostback, questo errore si verifica quando si fa clic su modifica ed elimina riga in gridview.

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

1

Quattro minuti fa ho ricevuto lo stesso errore. Poi ho fatto ricerche per mezz'ora come te. In tutti i forum generalmente dicono "aggiungi pagina enableEvent .. = false o true". Qualsiasi soluzione proposta non ha risolto i miei problemi fino a quando non l'ho trovata. Purtroppo il problema è un pulsante ASP.NET. L'ho rimosso due secondi fa. Ho provato a sostituire con "imagebutton", ma è stato anche inaccettabile (perché ha dato lo stesso errore).

Finalmente ho sostituito con LinkButton. sembra funzionare!


1

Stavo usando il datalist e stavo ottenendo lo stesso errore per il mio pulsante. Uso IsPostBack per controllare e riempire i miei controlli e il problema è risolto! Grande!!!


1

Ciò che ha funzionato per me è spostare il seguente codice da page_load a page_prerender:

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

La migliore opzione da fare è utilizzare il campo nascosto e non disabilitare la convalida dell'evento, modificare anche ogni casella di riepilogo, elenco a discesa per selezionare con l'attributo runat server


Il passaggio dal controllo asp al normale <select id = "director" runat = "server"> ha funzionato alla grande. Sono stato in grado di accedere al suo valore nel codice dietro usando: es .: string directorId = Request.Form [director.ID]
Baxter

1

Se si utilizza il pannello di aggiornamento Ajax. Aggiungi <Triggers>tag e al suo interno attiva il pulsante o il controllo che causa l'utilizzo di postback<asp:PostBackTrigger .../>


1

Se si conoscono in anticipo i dati che potrebbero essere popolati, è possibile utilizzare ClientScriptManager per risolvere questo problema. Ho riscontrato questo problema durante il popolamento dinamico di una casella a discesa utilizzando JavaScript su una selezione utente precedente.

Ecco un codice di esempio per sovrascrivere il metodo di rendering (in VB e C #) e dichiarare un valore potenziale per l'elenco a discesa 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

o una leggera variazione in C # potrebbe essere:

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

Per i neofiti: questo dovrebbe andare nel codice dietro il file (.vb o .cs) o se usato nel file aspx è possibile racchiudere i <script>tag.


1

Questo era il motivo per cui lo stavo ottenendo:

Ho avuto un ASP: ListBox. Inizialmente era nascosto. Sul lato client lo popolerei tramite AJAX con opzioni. L'utente ha scelto un'opzione. Quindi, quando si fa clic sul pulsante Invia, il Server diventerebbe tutto molto divertente per ListBox, poiché non si ricordava che avesse alcuna opzione.

Quindi quello che ho fatto è assicurarmi di cancellare tutte le opzioni dell'elenco prima di inviare il modulo al server. In questo modo il server non si è lamentato poiché l'elenco è andato al client vuoto ed è tornato vuoto.

Smistato!!!

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.