none
Problemas com Ajax e jquery RRS feed

  • Pergunta

  • Olá Comunidade, estou com um grande problema, tenho um <asp:Button> que quando clicado aparece o seguinte erro:

    "Argumento de postback ou de retorno de chamada inválido. A validação do evento é habilitada com o uso de <pages enableEventValidation="true"/> 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 postback ou de retorno de chamada se originam no controle do servidor que originalmente os processou. Se os dados forem válidos e esperados, use o método ClientScriptManager.RegisterForEventValidation para registrar os dados de postback ou de retorno de chamada para validação."

    Coloquei um breakpoint no codebehind , e se quer deu pageload.

    Já consegui descobrir a causa, é esta função Jquery com ajax, quando eu retiro ela, tudo funciona normalmente.:

    $(document).ready(function() {

        $('#ddlNomesDoutores').change(function() {

            var teste;

            var valor = $('#ddlNomesDoutores').find(':selected').text()

            var Parameters = "{nome:'" + valor + "'}";

            $.ajax({

                type: "POST",

                url: "Agenda_Eletronica.aspx/SelecionarEspecialidadesDoMedico",

                contentType: "application/json; charset= utf-8",

                data: Parameters,

                dataType: 'json',

     

                success: function(data) {

                    $("#ddlespecialidades").empty();

                    $(data.d).each(function(item, index) {

     

                        $('#ddlespecialidades').append("<option value='" + item + "'>" + index + "</option>");

     

                    });

     

                }

                , error: function() {

                    alert("erro");

                }

            });

     

        });

    });

     

    Alguem sabe o que pode estar acontecendo? 


    quinta-feira, 22 de dezembro de 2011 13:17

Respostas

Todas as Respostas

  • //Substitua todos os 
    // $('#ddlespecialidades')
    
    //por
     $('#<%=ddlespecialidades.ClientID%>')
    


    onde <%=ddlespecialidades.ClientID%> é o id do controle renderizado no client

    Robson Gmack Programador e Fan .net \o/
    • Sugerido como Resposta RobsonGmack quinta-feira, 22 de dezembro de 2011 17:13
    • Marcado como Resposta Harley Araujo segunda-feira, 26 de dezembro de 2011 11:30
    quinta-feira, 22 de dezembro de 2011 17:13
  •   valeu pela boa vontade cara, mais este método jquery ta funcionando, o problema é  após  selecionar um médico e este método preencher as especialidades no outro dropdown, após fazer isso eu clico no <asp:button> marcar consulta ae gera este erro sem nem entrar no code behind, como se estivesse dando conflito de requisições. 
    quinta-feira, 22 de dezembro de 2011 18:42
  • Isso acontece por que foi incluído uma nova opção no seu dropdownlist via Javascript, então a cada requisição o asp.net realiza uma validação "EventValidation", então verifica possíveis mudanças aos controles via DOM e assume que alguém mal intencionado possa ter alterados os valores originais dos controles.

    Para resolver o problema você poderia desabilitar o EventValidation, mas como isso implica em questões de segurança você pode utilizar o método RegisterForEventValidation.

     

    protected override void Render(System.Web.UI.HtmlTextWriter writer)
     {
            ClientScript.RegisterForEventValidation("ddlespecialidades");
    
            base.Render(writer);
     }
    

     

    Veja este artigo, que é mais explanatório:

    http://codes.codedigest.com/CodeDigest/141-What-is-the-use-of-ClientScript-RegisterForEventValidation()-method-in-ClientScriptManager-class--How-can-we-prevent-the-disabling-event-validation-in-ASP-Net--.aspx

     


    (Se a resposta ajudou, marque como útil)
    • Editado Wilian NS sábado, 24 de dezembro de 2011 14:03 typo
    • Marcado como Resposta Harley Araujo segunda-feira, 26 de dezembro de 2011 11:30
    sábado, 24 de dezembro de 2011 14:02
  • Faz como o willian falou eu uso para minha grid

     protected override void Render(HtmlTextWriter writer)

            {

                for (int i = 0; i < grvSearch.Rows.Count; i++)

                {

                    ClientScript.RegisterForEventValidation(grvSearch.UniqueID, "Select$" + i);

                }

                base.Render(writer);

            }


    Não esqueça de usar o componente </> na barra para posta seu código. Microsoft MCPD,MCTS,MCC
    segunda-feira, 26 de dezembro de 2011 11:31
    Moderador
  • mais aonde em qual momento eu chamo este método?
    terça-feira, 27 de dezembro de 2011 14:56
  • Você pode sobre-escrever o método Render com o modificador override, no codebehind de sua Page. E no momento que o evento Render for disparado, você registrará seu dropdownlist com o método RegisterForEventValidation.

    (Se a resposta ajudou, marque como útil)
    • Editado Wilian NS terça-feira, 27 de dezembro de 2011 22:48 typo
    terça-feira, 27 de dezembro de 2011 22:45