Postback inválido ou argumento de retorno de chamada. A validação de evento é ativada usando '<pages enableEventValidation = “true” />'

238

Estou recebendo o seguinte erro ao postar de volta uma página do lado do cliente. Eu tenho o código JavaScript que modifica um asp: ListBox no lado do cliente.

Como nós consertamos isso?

Detalhes do erro abaixo:

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
Júlio A
fonte
Não execute uma ligação de dados no evento page_load.
Paul Zahra

Respostas:

171

O problema é que o ASP.NET não conhece esse item de lista extra ou removido. Você tem várias opções (listadas abaixo):

  • Desative a validação de evento (má ideia, porque você perde um pouco de segurança que vem com muito pouco custo).
  • Use o ASP.NET Ajax UpdatePanel. (Coloque a caixa de listagem no painel Update e acione uma atualização, se você adicionar ou remover a caixa de listagem. Dessa forma, viewstate e os campos relacionados recebem atualizações e a validação de evento será aprovada.)
  • Esqueça o lado do cliente e use a postagem clássica e adicione ou remova os itens de lista do lado do servidor.

Eu espero que isso ajude.

Norbert B.
fonte
Mais uma opção: implementar IPostBackEventHandler e chamada js __doPostBack ( '<% = UniqueId.ToString ()%>', arg)
gdbdable
Com base nas sugestões acima, coloquei meus dropdowns em um asp.net regular asp: UpdatePanel, carreguei os dropdowns no código por trás e depois em newRecord.Update ();
Ricardo Appleton
183

Você tem códigos nos seus eventos Page_Load? se sim, talvez adicionando o seguinte ajude.

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

Este erro é gerado quando você clica no seu comando e o Page_load está sendo executado novamente, em um ciclo de vida normal será Page_Load -> Clique em Comando -> Page_Load (novamente) -> Processar ItemCommand Event

Jeff Pang
fonte
7
aha! Muito obrigado, esse foi o truque no meu caso! I recarregado um dropdownlist no pageload, e assim o quadro perdido o controle dos itens (os novos) no ddl, e aquele eu cliquei (que não existe mais)
Michel
Eu tive o mesmo erro do OP ... Eu estava usando um assistente no meu formulário e estava chamando a etapa 0 no carregamento da página. removeu isso e o problema desapareceu. Obrigado ...
tking
Muito obrigado por esta resposta .... teve o mesmo problema e acabou que eu tinha apenas esquecido a ignorar postagens quando o carregamento de dados em minha grade ... salva-me muito tempo
Quagmire
10
Duh! Voltar aos formulários da Web do MVC é uma dor. Esta é a resposta correta
Vishnoo Rath
2
Eu fiz isso, mas não funcionou para mim porque há um código que eu tenho que executar no evento page_load para quando não é um postback e, portanto, ainda tenho o mesmo erro. Desativar o viewstate para meu repetidor resolveu o problema.
Bryan
40

Eu tive uma experiência com o DataGrid. Uma de suas colunas era o botão "Selecionar". Quando eu estava clicando no botão "Selecionar" de qualquer linha, recebi esta mensagem de erro:

"Argumento inválido de postagem ou retorno de chamada. A validação de evento é ativada usando-se na configuração ou <% @ Page EnableEventValidation =" true "%> em uma página. Por motivos de segurança, esse recurso verifica se os argumentos para eventos de postagem ou retorno de chamada se originam do controle do servidor que originalmente renderizados. Se os dados forem válidos e esperados, use o método ClientScriptManager.RegisterForEventValidation para registrar os dados de postagem ou retorno de chamada para validação. "

Mudei vários códigos e finalmente consegui. Rota da minha experiência:

1) Alterei o atributo da página para EnableEventValidation="false". Mas não deu certo. (isso não é apenas perigoso por motivos de segurança, meu manipulador de eventos não foi chamado:void Grid_SelectedIndexChanged(object sender, EventArgs e)

2) Eu implementei ClientScript.RegisterForEventValidationno método Render. Mas não deu certo.

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) Alterei o tipo de botão na coluna da grade de PushButtonpara LinkButton.Funcionou! ("ButtonType =" LinkButton "). Acho que se você puder alterar o botão para outros controles como" LinkButton "em outros casos, funcionaria corretamente.

Amir Chatrbahr
fonte
1
Minha solução foi desistir dos botões de aninhamento dentro do datagrid. MS me falha mais uma vez.
Jacobs Data Solutions
Sua solução é trabalhada para mim também. Obrigado. Mas quero saber por que Buttonnão está funcionando quando linkButtonestá trabalhando no mesmo programa. Em caso afirmativo, devemos sempre usar linkButton? Como poderíamos tornar mais flexíveis?
Frank Myat Qui
8
Tente adicionar ao seu botão UseSubmitBehavior = "False" stackoverflow.com/questions/2968525/…
JJschk
Awesomeeeeeee :) .. Você pode aprender isso apenas por experiência. Você provou cenários reais. A experiência é a melhor professora.
Saun4frsh
Na substituição de Render VOCÊ DEVE COLOCAR base.Render (writer); no final ... caso contrário, não vai funcionar!
Paul Zahra
28

Você realmente deseja fazer 2 ou 3, não desative a validação de evento.

Existem dois problemas principais ao adicionar itens a um asp: lado do cliente da caixa de listagem.

  • A primeira é que ela interfere na validação do evento. O que voltou ao servidor não é o que foi enviado.

  • A segunda é que, mesmo que você desative a validação de eventos, quando sua página for postada novamente, os itens na caixa de listagem serão reconstruídos a partir do estado de exibição, para que todas as alterações feitas no cliente sejam perdidas. A razão para isso é que um asp.net não espera que o conteúdo de uma caixa de listagem seja modificado no cliente, espera apenas que uma seleção seja feita, descartando quaisquer alterações que você possa ter feito.

A melhor opção provavelmente usará um painel de atualização, conforme recomendado. Outra opção, se você realmente precisa fazer isso do lado do cliente, é usar uma planície antiga em <select>vez de uma<asp:ListBox> e manter sua lista de itens em um campo oculto. Quando a página é renderizada no cliente, você pode preenchê-la a partir de uma divisão do conteúdo do campo de texto.

Então, quando estiver pronto para publicá-lo, você repovoará o conteúdo do campo oculto do seu arquivo modificado. <select> . Então, é claro, você deve dividir isso novamente no servidor e fazer algo com seus itens, pois sua seleção está vazia agora que está de volta ao servidor.

Em suma, é uma solução bastante complicada que eu realmente não recomendaria, mas se você realmente tiver que fazer modificações no listBox no lado do cliente, funcionará. Eu realmente recomendo que você procure um updatePanel antes de seguir esse caminho.

Andy C.
fonte
3
c, não é necessário manter os itens selecionados em um campo oculto. Se você criar a caixa de seleção runat = "server", poderá ler o valor postado de volta no Request.Form [ selectid .UnqiueID]. E se vários forem selecionados, o navegador publicará os valores como um CSV. Observe que os itens e as propriedades de índice selecionadas do controle estarão errados no servidor, pois você modificou o itrmlist no cliente que o servidor não conhece.
Michael
Michael, isso funcionou. contanto que você adicione "multiple = true", caso contrário, ele fornecerá apenas 1 valor. Obrigado
Sameer Alibhai
1
Teve o mesmo problema para uma lista suspensa com caracteres de nova linha. Mudar para uma seleção funcionou perfeitamente. Obrigado!
Thchaver
Eu usei planície antiga <select>, que resolveu o problema. Você pode me dizer por que o Updatepanel está demorando muito para carregar dados quando comparado ao carregamento de dados ajax do lado do cliente.?
Pranesh Janarthanan
17

Eu tive o mesmo problema com um repetidor porque tinha uma página da Web com um controle Repeater em um site em que EnableEventValidation estava ativado. Não foi bom. Eu estava recebendo exceções relacionadas à postagem inválida.

O que funcionou para mim foi definir EnableViewState = "false" para o Repetidor. As vantagens são que é mais simples de usar, tão simples quanto desativar a validação de eventos para o site ou página da Web, mas o escopo é muito menor do que desativar a validação de eventos para ambos.

Umar Farooq Khawaja
fonte
3
Eu tive esse problema exato com um controle da web herdado. Nossa plataforma web / CMS (sitecore) recebeu uma grande atualização que ativou a validação de eventos (ela já estava desativada! Ai!). O controle do repetidor estava exibindo imagens em uma galeria da web (com botões para reorganizá-las) e na postagem desses botões a exceção ocorreria. Desabilitei o estado de exibição nos repetidores usando EnableViewState = "false", como você sugeriu, e pronto, funcionou. Como outros descobriram, Substituir Render () e usar ClientScriptManager.RegisterForEventValidation () não funcionou para mim. OBRIGADO!
xan
Como o @xan, também uso o Sitecore e é exatamente isso que eu precisava.
wilsjd
Isso funcionou para mim também. O painel AJAX Update também teria funcionado, mas estava sobrecarregado que eu não precisava no caso, então obrigado Umar Farooq Khawaja.
Bryan
17

Nenhuma das opções acima funcionou para mim. Depois de mais pesquisas, percebi que havia ignorado dois formulários aplicados na página que estava causando o 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>

Lembre-se de que recentemente o ASP.NET começou a considerar iframes em uma marca de formulário que contém uma marca de formulário no próprio documento iframe como um quadro aninhado. Eu tive que mover o iframe para fora da tag do formulário para evitar esse erro.

biggles
fonte
12

Eu tive o mesmo problema ao modificar um ListBox usando JavaScript no cliente. Isso ocorre quando você adiciona novos itens ao ListBox do cliente que não estavam lá quando a página foi renderizada.

A correção que encontrei é informar o sistema de validação de eventos de todos os possíveis itens válidos que podem ser adicionados a partir do cliente. Você faz isso substituindo Page.Render e chamando Page.ClientScript.RegisterForEventValidation para cada valor que seu JavaScript pode adicionar à caixa de listagem:

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

Isso pode ser um pouco complicado se você tiver um grande número de valores potencialmente válidos para a caixa de listagem. No meu caso, eu estava movendo itens entre dois ListBoxes - um que possui todos os valores possíveis e outro que está inicialmente vazio, mas é preenchido com um subconjunto dos valores do primeiro em JavaScript quando o usuário clica em um botão. Nesse caso, você só precisa percorrer os itens no primeiro ListBox e registrar cada um com a segunda caixa de listagem:

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

Uma outra maneira não mencionada aqui é a subclasse ListBox

Ou seja.

public class ListBoxNoEventValidation : ListBox 
{
}

ClientEventValidation retira o atributo System.Web.UI.SupportsEventValidation se você a subclassificar, a menos que você o adicione explicitamente novamente, ele nunca chamará a rotina de validação. Isso funciona com qualquer controle e é a única maneira que encontrei para "desabilitá-lo" em uma base de controle por controle (ou seja, não no nível da página).

Mike C.
fonte
2
Bem descrito aqui .
Pavel Hodek
1
Eu acho que a melhor maneira de abordar é fazendo isso. Deveríamos corrigi-lo no nível de controle, e não no nível da página, e arriscar a segurança de todos os controles envolvidos com +1. Agradecemos a @PavelHodek por esse link.
James Poulose
Infelizmente, parece que, se você fizer isso, quaisquer itens da lista adicionados ao cliente não serão reconhecidos se forem itens selecionados quando a página for postada novamente.
Jonathan Madeira
9

você tenta algo assim, na sua página .aspx

adicionar

EnableEventValidation = "false"

sinta-se à vontade para fazer qualquer pergunta!

user3690871
fonte
Eu argumentaria que desabilitar a oferta de validação integrada pela estrutura para parar de ver o erro seria a solução mais apropriada nesse caso.
Jviaches
8

Se você preencher o DropdownList através do script do lado do cliente, limpe a lista antes de enviar o formulário de volta ao servidor; o ASP.NET não reclamará e a segurança continuará ativa.

E para obter os dados selecionados no DDL, você pode anexar um evento "OnChange" ao DDL para coletar o valor em uma Entrada oculta ou em uma caixa de texto com Style = "display: none;"

MyEname
fonte
+1 Fácil de implementar. Pode não ser o mais limpo, mas fácil o suficiente.
nutsch
7

3: Alterei o tipo de botão na coluna da grade de "PushButton" para "LinkButton". Funcionou! ("ButtonType =" LinkButton ") Acho que se você puder alterar o botão para outros controles como" LinkButton "em outros casos, funcionaria corretamente.

Eu gostaria de poder votar em você, Amir (infelizmente meu representante é muito baixo.) Eu estava tendo esse problema e mudar isso funcionou como um campeão no meu gridview. Só um pouco de lado, acho que o código válido é: ButtonType = "Link"

Eu suspeito que isso ocorre porque, quando você clica em "editar", sua edição muda para "atualização" e "cancelamento", que são alteradas novamente para "edição" no envio. E esses controles de mudança tornam o .net desconfortável.

Brian Welch
fonte
O ponto crucial desse problema é o modelo de validação de evento asp.net e se a "página" é modificada pelo cliente no momento em que você faz uma postagem de volta. O que você quer dizer com '..... E esses controles de mudança tornam o .net desconfortável' ??
217 Julius
7

(1) EnableEventValidation = "false" ................... Não funciona para mim.

(2) ClientScript.RegisterForEventValidation .... Não funciona para mim.

Solução 1:

Altere o Button / ImageButton para LinkButton no GridView. Funciona. (Mas eu gosto do ImageButton)

Pesquisa: Button / ImageButton e LinkButton usam métodos diferentes para postback

Artigo original:

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

Solução 2:

Em OnInit (), digite o código semelhante a este para definir um ID exclusivo para 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();           
  }
}

Artigo original:

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

yilee
fonte
6

Eu implementei uma exibição de grade aninhada e enfrentei o mesmo problema. Usei o LinkButton em vez do botão de imagem como este:

antes de eu ter uma coluna como esta:

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

Eu substituí assim.

<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> 
Swathi
fonte
5

Eu tive um problema semelhante, mas não estava usando o ASP.Net 1.1 nem atualizando um controle via javascript. Meu problema aconteceu apenas no Firefox e não no IE (!).

Adicionei opções a um DropDownList no evento PreRender como este:

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

Meu "HF" (campo oculto) tinha as opções separadas pela nova linha, assim:

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

O problema era que a página HTML estava quebrada (quero dizer, tinha novas linhas) nas opções do "select" que representava o DropDown.

Então resolvi meu problema adicionando uma linha:

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

Espero que isso ajude alguém.

pamelo
fonte
4

se você mudar UseSubmitBehavior="True" para o UseSubmitBehavior="False"seu problema será resolvido

<asp:Button ID="BtnDis" runat="server" CommandName="BtnDis" CommandArgument='<%#Eval("Id")%>' Text="Discription" CausesValidation="True" UseSubmitBehavior="False" />
ali joodie
fonte
Isso não funcionou para mim. No entanto, estou usando um botão de imagem e em uma tabela em um repetidor, para que não seja exatamente a mesma situação. Desativar o viewstate do repetidor funcionou para mim.
Bryan
3

Eu tive o mesmo problema, o que fiz:

Acabei de adicionar uma condição if(!IsPostBack)e funciona bem :)

Niket
fonte
3

Este erro será exibido sem postagem

Adicionar código:

If(!IsPostBack){

 //do something

}
Balaji Selvarajan
fonte
2

Nesse caso, adicione o ID ao botão RowDataBound da grade. Isso resolverá o seu problema.

nilesh
fonte
2

Uma solução simples para esse problema é usar a verificação IsPostBack no carregamento da página. Isso resolverá esse problema.

user249527
fonte
2

O Ajax UpdatePanel faz isso, e acho que é a maneira mais fácil, ignorando a sobrecarga de postagem do Ajax .

netseng
fonte
2

Eu sei que este é um post super antigo. Supondo que você esteja ligando para o seu aplicativo, aqui está uma ideia que funcionou para mim:

  1. Implemente o ICallbackEventHandler na sua página
  2. Chame ClientScriptManager.GetCallbackEventReference para chamar o código do lado do servidor
  3. Como indica a mensagem de erro, você pode chamar ClientScriptManager.RegisterForEventValidation

Se você não precisar de controle total, poderá usar um painel de atualização que faria isso por você.

tmck2
fonte
2

Encontramos esse mesmo problema quando convertíamos nossas páginas ASPX regulares em páginas de conteúdo.

A página com esse problema tinha uma </form>tag em uma das seções Conteúdo, portanto, duas tags de final de formulário foram renderizadas em tempo de execução, o que causou esse problema. A remoção da tag final de formulário extra da página resolveu esse problema.

Tushar
fonte
Obrigado, acontece que eu também tinha <form>campos extras no meu código.
Eric Kigathi 19/10/2015
2

Se você estiver usando o gridview e não vincular o gridview ao carregamento de página dentro do! Ispostback, esse erro ocorrerá quando você clicar em editar e excluir a linha no gridview.

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

Há quatro minutos, recebi o mesmo erro. Então eu pesquisei durante meia hora como você. Em todos os fóruns, eles geralmente dizem "adicionar página enableEvent .. = false ou true". Qualquer solução proposta não resolveu meus problemas até que eu a encontrasse. Infelizmente, o problema é um botão do ASP.NET. Eu o removi dois segundos atrás. Tentei substituir por "imagebutton", mas também foi inaceitável (porque deu o mesmo erro).

Finalmente eu substituí por LinkButton. Parece que está funcionando!

cem
fonte
1

Eu estava usando o datalist e estava recebendo o mesmo erro no meu botão de pressão. Eu apenas uso o IsPostBack para verificar e preencher meus controles e o problema está resolvido! Ótimo!!!

Razia
fonte
1

O que funcionou para mim foi mover o seguinte código de page_load para 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>");
}
Murad Dodhiya
fonte
1

A melhor opção a fazer é usar o campo oculto e não desativar a validação de eventos, também altere todas as caixas de listagem e lista suspensa para selecionar com o atributo do servidor runat

Programista
fonte
Mudar do controle asp para regular <select id = "director" runat = "server"> funcionou muito bem. Eu era capaz de acessar seu valor no código por trás usando: ex .: string directorId = Request.Form [director.ID]
2260 Baxter
1

Se você estiver usando o painel de atualização do Ajax. Adicione a <Triggers>tag e dentro dela acione o botão ou controle causando o postBack usando<asp:PostBackTrigger .../>

devo882
fonte
1

Se você souber de antemão os dados que poderiam ser preenchidos, poderá usar o ClientScriptManager para resolver esse problema. Eu tive esse problema ao preencher dinamicamente uma caixa suspensa usando javascript em uma seleção de usuário anterior.

Aqui está um exemplo de código para substituir o método de renderização (em VB e C #) e declarar um valor potencial para o ddCar da lista suspensa.

No 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

ou uma pequena variação no C # pode ser:

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

Para iniciantes: isso deve aparecer no código por trás do arquivo (.vb ou .cs) ou, se usado no arquivo aspx, você pode agrupar as <script>tags.

CraigS
fonte
1

Esta foi a razão pela qual eu estava conseguindo:

Eu tinha um ASP: ListBox. Inicialmente estava escondido. No lado do cliente, eu o preencheria via AJAX com opções. O usuário escolheu uma opção. Então, ao clicar no botão Enviar, o servidor ficaria engraçado com o ListBox, pois não se lembrava de ter opções.

Então, o que fiz foi garantir que limpe todas as opções da lista antes de enviar o formulário de volta ao servidor. Dessa forma, o servidor não reclamou, pois a lista foi para o cliente vazia e voltou vazia.

Classificado !!!

user2520440
fonte