11
respostas

Erro Valor SelectedValue

Bom dia pessoal.

Estou com um problema muito estranho, não sei se alguém já passou por isso:

Utilizo o SelectedValue para pegar o item selecionado de uma combo do lado do servidor, assim:

comboDimensao = getFiltroDDL(ddlFiltroDimensao.SelectedValue);

O que acontece é que depurando o valor chega sempre zero.

Já depurando no cliente o valor selecionado na combo está correto, veja:

No console faço o seguinte:

$('#ddlFiltroDimensao').val() e obtenho o resultado correto no cliente "157" , já no servidor sempre chega com zero.

Mando abaixo o código javacript em que monto a combo:

function carregaDimensaoFiltro() {

        if ($('#ddlFiltroEmpresa').val() == null) {
            empresa = codEmpresaSelecionada;
        }
        else {
            empresa = $('#ddlFiltroEmpresa').val();
        }

        $.ajax({
            type: 'GET',
            url: 'frmRelatorioFinal.aspx/carregaComboDimensaoComFiltro',
            contentType: 'application/json; charset=utf-8',
            data: {
                codEmpresa: empresa,
                codCiclo: $('#ddlCiclo').val()
            },
            success: function (response) {
                $('#ddlFiltroDimensao').empty();

                response.d.forEach(function (dimensao) {
                    addItem(dimensao.codigo, dimensao.descricao, "ddlFiltroDimensao");
                });

                    //Comentado para teste

                addItem(0, "Todos", "ddlFiltroDimensao");
                //fim comentario

                //Comentado para teste
                $('#ddlFiltroDimensao option[value=0]').attr('selected', 'selected');

            },
            error: function (error) {
                console.log(error);
                alert(error + "erro carregaAspectoDimensao");
            }
        });
    }

Criação do componente:

<asp:Label ID="lblDimensoes" runat="server" ClientIDMode="Static">Dimensão: <asp:DropDownList ID="ddlFiltroDimensao" runat="server" ClientIDMode="Static" onChange="javascript:carregaAspectoFiltro();carregaIndicadorFiltro();">

Se alguém puder me ajudar, ficarei muito grata.

Flavia

11 respostas

Fala ai Flávia, tudo bem? O que você precisa fazer? Ao selecionar um item no select precisa popular o segundo?

Espero ter ajudado.

Oi Matheus.

Na verdade preciso apenas pegar o valor do selectedValue no servidor, pois do lado cliente o valor é pego corretamente, sendo que do lado servidor sempre pega valor zero "0" como se nada tivesse sido selecionado.

Obrigada. Flávia

Nesse caso precisaria entender como você está enviando os dados de volta para o servidor, seria esse ajax que você compartilhou? Se sim, sugiro trocar o data por query params, ou seja, em vez de enviar os dados no body, você passa na URL, algo mais ou menos assim:

url: `frmRelatorioFinal.aspx/carregaComboDimensaoComFiltro?codEmpresa=${ empresa}&codCiclo=${$('#ddlCiclo').val()}`,

Isso porque a requisição é do tipo GET e não é muito recomendável realizar requisições GET com body.

Obs: Também vai precisar atualizar seu back para ler os dados via parâmetros e não body.

Espero ter ajudado.

Oi Matheus.

Examente este é o método que envia de volta para o servidor. Tem algum e-mail para que eu possa te explicar melhor e enviar os códigos?

Obrigada pela atenção. Flávia

Fala Flávia, tudo bem? O ideal seria a gente conversar por aqui para que fique de ajuda para outros alunos com problemas iguais ou parecidos.

A solução que eu te passei para enviar os dados na URL não deu certo?

Fico no aguardo.

Oi Matheus.

Não deu certo. O mais impressionante é que eu utilizo o selectedValue em dois casos: Tenho uma combo de empresa que ao ser selecionada preenche a combo dimensão, neste caso o selectedValue pega o valor correto da empresa selecionada e pega o valor 0 para a dimensão(ou seja não pega o valor selecionado), este é o primeiro caso e ocorre erro. Já em um outro relatório não tenho o filtro empresa filtrando dimensão, ou seja, a dimensão é carregada direto e neste caso o valor selecionado na dimensão é pego corretamente.

Vamos ao código que dá erro:

Componentes criados Empresa e Dimensão:

<asp:Label ID="lblEmpresas" runat="server" ClientIDMode="Static">Empresa:</asp:Label>
        <asp:DropDownList ID="ddlFiltroEmpresa" runat="server" ClientIDMode="Static" onChange="javascript:carregaFiltros();">
        </asp:DropDownList>

<asp:Label ID="lblDimensoes" runat="server" ClientIDMode="Static">Dimensão: <asp:DropDownList ID="ddlFiltroDimensao" runat="server" ClientIDMode="Static" onChange="javascript:carregaAspectoFiltro();carregaIndicadorFiltro();">

Funções JavaScript chamadas:

function carregaFiltros() { if ($('#ddlFiltroEmpresa').val() != null) { carregaDimensaoFiltro(); }

        carregaAspectoFiltro();
        carregaIndicadorFiltro();
    }

    function carregaDimensaoFiltro() {

        if ($('#ddlFiltroEmpresa').val() == null) {
            empresa = codEmpresaSelecionada;
        }
        else {
            empresa = $('#ddlFiltroEmpresa').val();
        }

        $.ajax({
            type: 'GET',
            url: 'frmRelatorioFinal.aspx/carregaComboDimensaoComFiltro',
             contentType: 'application/json; charset=utf-8',
            data: {
                codEmpresa: empresa,
                codCiclo: $('#ddlCiclo').val()
            },
            success: function (response) {
                $('#ddlFiltroDimensao').empty();

                response.d.forEach(function (dimensao) {
                    addItem(dimensao.codigo, dimensao.descricao, "ddlFiltroDimensao");
                });

          addItem(0, "Todos", "ddlFiltroDimensao");


                $('#ddlFiltroDimensao option[value=0]').attr('selected', 'selected');

            },
            error: function (error) {
                console.log(error);
                alert(error + "erro carregaAspectoDimensao");
            }
        });
    }

O erro ocorre do lado do servidor:

protected void funcaoGerarRelatorio() { Int32? filtroEmpresa, filtroDimensao, filtroAspecto, filtroIndicador;

        filtroEmpresa = getFiltroDDL(ddlFiltroEmpresa.SelectedValue);
// O erro ocorre na linha abaixo apenas quando tenho que selecionar a empresa, pois esta filtra as dimensões. Aqui é passado o valor 0 para o SelectedValue ( da dimensão, a empresa o valor é pego direitinho)como se não tivesse selecionado nada.

// O mais impressionante que quando tenho um relatório que não tem a combo empresa , ou seja, é preenchida a combo dimensão sem filtro, neste caso o código entra nesta mesma função sendo que pega o valor correto selecionado na combo dimensão e depois filtra um outro combo, mas os valores são passados corretamente.

              filtroDimensao = getFiltroDDL(ddlFiltroDimensao.SelectedValue);


        //Acrescentado para teste
        int cboIndex = ddlFiltroDimensao.SelectedIndex;
        string strId = ddlFiltroDimensao.Items[cboIndex].ToString();
        //fim do teste


        filtroAspecto = getFiltroDDL(ddlFiltroAspecto.SelectedValue);
        filtroIndicador = getFiltroDDL(ddlFiltroIndicador.SelectedValue);

Está um mistério isto. Desde já agradeço a ajuda.

Flávia

Realmente Flavia, sem conseguir simular o problema na minha maquina fica complicado eu tentar te ajudar.

Eu precisaria do projeto rodando por aqui.

Abraços e bons estudos.

Ok. Matheus.

De qualquer forma te agradeço.

Flavia

Se quiser e puder compartilha o projeto comigo, não manjo de ASP.NET ou .NET mas dou um jeito de tentar subir ele aqui e ver o problema (pode demorar um pouco).

Pode compartilhar através do Github ou Google Drive (zipado).

Fico no aguardo.

Bom dia Matheus.

Não tem como. O projeto é muito grande.

De qualquer forma agradeço.

Flavia

Magina Flávia, sempre que precisar não deixe de criar suas dúvidas.

Abraços e bons estudos.