CONSULTA COM DOIS PARÂMETROS

 Tópico anterior Próximo tópico Novo tópico

CONSULTA COM DOIS PARÂMETROS

ASP.NET

 Compartilhe  Compartilhe  Compartilhe
#493888 - 22/05/2020 09:15:08

PERCIFILHO
MATAO [SP]
Cadast. em:Dezembro/2009


Bom dia a todos!



Em um projeto Asp,Net Core preciso fazer uma busca nos dados digitando o texto e pesquisando ou por cpf ou por nome do cliente conforme imagem anexa.

Pensei em fazer a controller do index dessa forma, passando dois parâmetros: o texto a pesquisar e o modo da consulta(cpf ou nome):

public async Task<IActionResult> Index(string search, string buscar)
        {
            IEnumerable<Cliente> clientes = null;
            string apiResposta;

            if (string.IsNullOrEmpty(search))
            {
                HttpResponseMessage resposta = await client.GetAsync(Dados.Api + "clientes");
                resposta.EnsureSuccessStatusCode();
                apiResposta = await resposta.Content.ReadAsStringAsync();
                clientes = JsonConvert.DeserializeObject<IEnumerable<Cliente>>(apiResposta);
            }
            else
            {
                if (buscar == "cpf")
                {
                    HttpResponseMessage resposta = await client.GetAsync(Dados.Api + "clientes/cpf/" + search);
                    resposta.EnsureSuccessStatusCode();
                    apiResposta = await resposta.Content.ReadAsStringAsync();
                    clientes = JsonConvert.DeserializeObject<IEnumerable<Cliente>>(apiResposta);
                }
                else if (buscar == "nome")
                {
                    HttpResponseMessage resposta = await client.GetAsync(Dados.Api + "clientes/nome/" + search);
                    resposta.EnsureSuccessStatusCode();
                    apiResposta = await resposta.Content.ReadAsStringAsync();
                    clientes = JsonConvert.DeserializeObject<IEnumerable<Cliente>>(apiResposta);
                }
            }
            return View(indice);
        }


Na minha View Index, eu tenho essa parte que mostra os botões:

<div class="panel-footer" style="background-color:white; border-color:lightblue; height:60px;">
    @using (Html.BeginForm(FormMethod.Get))
    {
        <table id="tabela-pesquisa">
            <tr>
                <th>Buscar: </th>
                <th>  </th>
                <th><input type="text" class="form-control" name="search" /></th>
                <th>  </th>
                <th><input type="submit" class="btn" style="background-color: lightsteelblue;" value="Buscar por C.P.F." /></th>
                <th>  </th>
                <th><input type="submit" class="btn" style="background-color: lightsteelblue;" value="Buscar por Cliente" /></th>
               </tr>
        </table>
    }
</div>


O que eu não sei é como passar os dois parâmetros no submit para realizar a consulta, está passando apenas o parâmetro search.
Alguém me dá uma luz.
E se essa não for a melhor maneira de se fazer isso, aceito sugestões.

____________________________________________________
Não há nessa vida algo que não se possa alcançar, você só precisa ir buscar.

#493891 - 22/05/2020 10:34:11

MRSILVA
MARINGA
Cadast. em:Julho/2015


Última edição em 22/05/2020 10:42:27 por MRSILVA

Olá.
Uma sugestão não seria mais fácil enviar um único parâmetro mesmo e você verificava isso na sua WebApi, ou seja se for um CPF faz um tratamento se for  nome  faz outra coisa.
Os dois parâmetros são string  não vai ter dificuldade de fazer uma verificação.
Daria até para colocar um único botão.

Basicamente faria dessa forma:

Você deve ter uma função que verifica se é um CPF válido, então passaria os dados para essa função se retornar válido faz o que precisa ser feito com a informação do CPF se retorna invalido faz o que precisa ser feito com o nome.






#493892 - 22/05/2020 10:50:51

PERCIFILHO
MATAO [SP]
Cadast. em:Dezembro/2009


MRSILVA, então, eu posso estar pensando errado, mas eu fiz na api desse jeito:

        // GET: api/clientes
        [HttpGet]
        public async Task<ActionResult<IEnumerable<Cliente>>> GetClientes()
        {
            return await _context.Cliente.OrderBy(x => x.Nome).ToListAsync();
        }

        // GET: api/clientes/cpf/99999999999
        [HttpGet]
        [Route("Cpf/{cpf}")]
        public async Task<ActionResult<IEnumerable<Cliente>>> GetClienteByCpf(string cpf)
        {
            return await _context.Cliente
                .Where(x => x.Cpf == cpf)
                .OrderBy(x => x.Nome).ToListAsync();
        }

        // GET: api/clientes/nome/xxxxxx
        [HttpGet]
        [Route("Nome/{nome}")]
        public async Task<ActionResult<IEnumerable<Cliente>>> GetClienteByNome(string nome)
        {
            return await _context.Cliente
                .Where(x => x.Nome.ToLower().Contains(nome))
                .OrderBy(x => x.Nome).ToListAsync();
        }



____________________________________________________
Não há nessa vida algo que não se possa alcançar, você só precisa ir buscar.

#493895 - 22/05/2020 11:58:37

MRSILVA
MARINGA
Cadast. em:Julho/2015


Última edição em 22/05/2020 12:00:06 por MRSILVA

Percefilho.

Me expressei errado quando disse fazer o tratamento na WEBAPI na verdade quis dizer seu controller do index, é que geralmente faço busco a informação da WEBAPI  renderizo o HTML via JAVASCRIPT.
Citação:
public async Task<IActionResult> Index(string search, string buscar)
        {
            IEnumerable<Cliente> clientes = null;
            string apiResposta;

            if (string.IsNullOrEmpty(search))
            {
                HttpResponseMessage resposta = await client.GetAsync(Dados.Api + "clientes");
                resposta.EnsureSuccessStatusCode();
                apiResposta = await resposta.Content.ReadAsStringAsync();
                clientes = JsonConvert.DeserializeObject<IEnumerable<Cliente>>(apiResposta);
            }
            else
            {
                if (buscar == "cpf")
                {
                    HttpResponseMessage resposta = await client.GetAsync(Dados.Api + "clientes/cpf/" + search);
                    resposta.EnsureSuccessStatusCode();
                    apiResposta = await resposta.Content.ReadAsStringAsync();
                    clientes = JsonConvert.DeserializeObject<IEnumerable<Cliente>>(apiResposta);
                }
                else if (buscar == "nome")
                {
                    HttpResponseMessage resposta = await client.GetAsync(Dados.Api + "clientes/nome/" + search);
                    resposta.EnsureSuccessStatusCode();
                    apiResposta = await resposta.Content.ReadAsStringAsync();
                    clientes = JsonConvert.DeserializeObject<IEnumerable<Cliente>>(apiResposta);
                }
            }
            return View(indice);
        }  


Conforme acima ao invés de usar a string buscar para fazer a verificação você pode verificar se é um CPF ou não, também daria  (não recomendado) verificar sé é número e tem 11 dígitos se for faz o tratamento de CPF se não faz o tratamento do nome...




#493969 - 28/05/2020 10:51:21

PERCIFILHO
MATAO [SP]
Cadast. em:Dezembro/2009


Obrigado, amigo, mas eu resolvi fazer de outra maneira, com duas textbox para consulta, funcionou para mim, mas valeu muito obrigado mesmo.

____________________________________________________
Não há nessa vida algo que não se possa alcançar, você só precisa ir buscar.

#493971 - 28/05/2020 11:25:03

MRSILVA
MARINGA
Cadast. em:Julho/2015


Blz.
Posta aí como fez pode ajudar outras pessoas que precisar.



 Tópico anterior Próximo tópico Novo tópico


Para responder este tópico o login é requerido
Se você já possui uma conta de usuário por favor faça seu login
Se você não possui uma conta de usuário use a opção Criar usuário