Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

JullySL

[Resolvido] Autocomplete e completando campos com valores em Jquery e Asp Net MVC

Recommended Posts

Boa tarde! 

Gostaria da ajuda de vocês, fiz um autocomplete na tela de cadastros de chamados, para quando o usuário estiver cadastrando um um chamado, se for cliente novo ou existente, se ele digitar Maria e tiver 3 Marias cadastradas ele irá selecionar a Maria que se refere o chamado, selecionando a Maria existente quando ele pressionar para o próximo campo eles serão autopreenchidos com as informações do cliente que está na base de dados, porém quando o cliente não existir apenas dar continuidade ao cadastro. O Problema do meu código é:
Tenho cadastrado no cadastro de clientes:
Cliente1: Maria Santos
Cliente 2: Maria Virginia
Se eu selecionar Maria Virginia ele trás os dados tanto da Maria Santos quanto da Maria Virginia,sendo que se eu selecionei Maria Virginia não tem por que ele trazer dados de outro cliente certo?! segue script
Crontroller:

 

Controller

[HttpGet]
        public ActionResult Index()
        {
            return View();
        }
        [HttpPost]
        public JsonResult Index(string Prefix)
        {
            ClienteAplicacao appCliente = new ClienteAplicacao();
            var ListarCliente = appCliente.ListaTodos();
            
            var ClienteNome = (from N in ListarCliente
                               where N.Nome.StartsWith(Prefix)
                               select new { N.Nome, N.Id, N.Email });
            return Json(ClienteNome, JsonRequestBehavior.AllowGet);
        }
        public JsonResult ClienteList(string Id)
        {
            ClienteAplicacao appCliente = new ClienteAplicacao();
            var ListaCliente = appCliente.ListaTodos();
           
            var resultado = (from c in ListaCliente
                             where (c.Nome.ToLower().Contains(Id.ToLower()))
                             select c).ToList();       
            return Json(resultado, JsonRequestBehavior.AllowGet);
        }

Jquery

 

   

 $(document).ready(function () {
        $("#Nome").autocomplete({
            source: function (request, response) {
                $.ajax({
                    url: "/Autocom/Index",
                    type: "POST",
                    dataType: "json",
                    data: { Prefix: request.term },
                    success: function (data) {
                        response($.map(data, function (item) {
                            return {
                                label: item.Nome + ", " + item.Email,
                                value: item.Nome
                                
                            };
                            //return data;                          }))
                        $('#Nome').blur(function () {
                            var aChk = document.getElementsByName('Nome');
                            var texto = texto + (aChk.value)
                            $('#lbairro').val(texto);
                            alert(texto);
                            $.getJSON('/Autocom/ClienteList/' + $('#Nome').val(), function (data) {
                                var items = '';
                                $.each(data, function (i, cliente) {
                                    
                                    items += 'E-mail:<input type="email" id="Email" name="Email" value="' + cliente.Email + '" class="txtInputMax" />';
                                    
                                });
                                
                                $('#rData').html(items);
                            });
                        })
                    }
                })
            },
            
        });
        
    })



Formulário

 

<input id="NomeCliente" name="NomeCliente" type="hidden" value="" />
    <div>
        Nome:
        <input name="Nome" id="Nome" type="text" class="txtInputMax" />
    </div>
    <div class="editor-field" id="rData">
            E-mail:
            <input name="Email" id="Email" type="text" class="txtInputMax" />
    </div>

Agradeço quem puder ajudar!

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Veja seu select:

var resultado = (from c in ListaCliente
                             where (c.Nome.ToLower().Contains(Id.ToLower()))
                             select c).ToList(); 

Ele está retornando uma lista.

 

O que indico, é que quando fizer o autocomplete, anexar o id junto ao nome, e quando for selecionado uma pessoa da lista, passar o id como parâmetro, e não o nome.

 

E se for pra fazer com o  nome, sugiro que faça o seguinte:

var resultado = (from c in ListaCliente
                             where (c.Nome.ToLower() == Id.ToLower())
                             select c).FirstOrDefault();

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por Thiago Duarte
      Oi, gostaria de arrastar imagem e ao soltar formar bloco html, meu bloco de html ficaria com nome, content-1.html, content-2.html, etc
       
      Alguem pode me ajudar?
    • Por clovis.sardinha
      Tenho uma consulta de autocomplete no bd que funciona no servidor local e não roda no servidor da web. 
      Ao enviar a consulta no servidor local  aparece no console :Fetch terminou o carregamento: GET ".../Cidade?cidade=sao%20paulo". A pesquisa é feita normalmente.
      Quando mando a mesma pesquisa para o servidor web(locaweb) aparece no console: Fetch terminou o carregamento: GET "..../Cidade?cidade=sao%2520paul".
      O número 25 aparece só no servidor web. Pelo que pesquisei 25 significa %, ou seja, está duplicando o caractere %. 
      Não consegui utilizar nenhuma função para evitar que isto ocorra. Alguém sabe se há alguma configuração no servidor web que possa ser alterada para evitar essa duplicação?
       
    • Por ILR master
      Salve galera.
       
      Vou publicar um evento e quero colocar um Cronômetro regressivo que mostre em tempo real os dias, horas e minutos que faltam para determinada data, tipo:.
      Faltam 5 dias, 12:30:00 para inauguração.
       
      Qdo chegar no dia, quero que apenas apareça uma mensagem.
       
      Alguém pode me ajudar?
    • Por clovis.sardinha
      Estou em um impasse pois sei pouco de javascript. Estou fazendo um autocomplete com CI4 e Javascript.
      Consigo gerar, através do controllers/model do CI4 um arquivo em json, mas não consigo retorná-lo para o javascript para poder mostrar as opções para consulta. 
      O console.log mostra que estou obtendo o  json() { [native code] }.
      Segue os dois arquivos para ver se alguém me ajuda.
      //arquivo cidade.js async function carregar_cidade(valor) { if (valor.length >= 3) { //console.log("Pesquisar:" + valor); const dados = fetch('Testes/?cidade='+valor, { method: "get", headers: { "Content-Type": "application/json", "X-Requested-With": "XMLHttpRequest" } }); const resposta = (await dados).json; console.log(resposta); var html = "<ul class='list-group position-fixed'>"; html += "<li class='list-group-item'>" + resposta['cid_nome'] + "</li>"; html += "</ul>"; } } <?php //arquivo Testes.php namespace App\Controllers; use App\Models\CidadeModel; /** NÃO MANDAR PARA O SERVIDOR - APENAS TESTES DE FUNÇÕES E OUTROS ELEMENTOS DO CI4 */ class Testes extends BaseController{ protected $tbCidades; public function __construct(){ $this->tbCidades = new CidadeModel(); } public function index(){ $request = \Config\Services::request(); $client = \Config\Services::curlrequest(); $cidades=[]; if($get=$request->getGet()){ $cities=$get['cidade']; $cidadeFiltrada=$this->tbCidades->getCidByName($cities); $cidades= json_encode($cidadeFiltrada); //dd($cidades); } echo view('Testes/testes'); } public function salvar(){ $request = \Config\Services::request(); if($post=$request->getPost()){ dd($post); } } } <!doctype html> <html lang="pt-br"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <!-- Bootstrap CSS --> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous"> <title>Autocomplete</title> </head> <body> <div class="container"> <h1 class="mt-4 mb-4">Formulário</h1> <form class="row g-3"> <div class="col-12"> <label for="cidade" class="form-label">Cidade</label> <input type="text" name="cidade" class="form-control" id="cidade" placeholder="Pesquisar cidade" onkeyup="carregar_cidade(this.value)"> </div> <span ></span> </form> </div> <!-- Optional JavaScript; choose one of the two! --> <!-- Option 1: Bootstrap Bundle with Popper --> <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-ka7Sk0Gln4gmtz2MlQnikT1wXgYsOg+OMhuP+IlRH9sENBO0LRn5q+8nbTov4+1p" crossorigin="anonymous"></script> <script src="assets/js/cidade.js"></script> </body> </html>
    • Por ment0r
      Boa noite pessoal, tudo bem?
       
      Estou desenvolvendo um sistema simples com exibição de formulário via modal. Uma vez cadastrado o serviço (tabela possui apenas dois campos, id e nome), eles são exibidos numa tabela com um ícone que permite a alteração do nome.

       
      Eu clico no ícone e é chamado um modal que é gerado via ajax (pois são vários registros).
       

       
      Nesse modal é mostrado o serviço e uma vez alterado, o botão Salvar chama uma função que atualiza a tabela servico, concluindo a tarefa. Fiz o mesmo processo pra cadastrar o serviço, com a diferença de que o modal está presente na mesma página, ou seja, não é chamado via ajax.
       
      Eis os códigos:
      <a href="#" onclick="modalUpdate(<?= trim($array['id']) ?>)"> <i class='bx bx-edit'></i> </a> // Trecho onde eu chamo a função modalUpdate. Função btAltServico click:
      $('#btAltServico').click(function() { var inpnome = $('#nome'); var inpid = $('#id'); if (inpnome.val() == '') { swal("Atenção", "Por favor, preencha os campos obrigatórios", "warning"); if (inpnome.val() == '') { inpnome.css("border","2px solid #f94545"); } else { inpnome.css("border",""); } alert(inpnome); alert(inpid); } else { $.ajax({ url: '../inc/ajax/altServico.php', type: 'post', dataType: 'json', // pode ser html data: { nome : inpnome.val(), id : inpid.val() }, success: function(resposta){ if (resposta == 1) { inpnome.val(""); inpnome.css("border",""); swal("Sucesso", "Serviço alterado", "success"); } else { if (resposta == 0) { swal("Erro", "Serviço não alterado. Log de erro gerado.", "error"); } else { swal("Atenção", "Serviço já cadastrado", "warning"); } } } }) } });  
      E modalUpdate.php :
       
      <?php /* * altServico.php * * Script responsável pelo update de serviços na tabela servico * * Função chamada pelo arquivo ajax.js */ //if ($_POST) { require'../conn.php'; require'../../class/class.geral.php'; $geral = new Geral(); $nome = $_POST['nome']; $id = $_POST['nome']; $ativo = 1; // Verifica se o servico já foi cadastrado $sqlVer = "select nome from algo68_db_cliente.servico where nome = '".$nome."' and id <> ".$id.""; $queryVer = mysqli_query($conn, $sqlVer); $resultVer = mysqli_num_rows($queryVer); if ($resultVer > 0) { echo json_encode(2); // servico já cadastrado } else { // Update do servico $sql = "update algo68_db_cliente.servico set nome = '".$nome."', ativo = ".$ativo." where id = ".$id; $query = mysqli_query($conn, $sql); $result = mysqli_affected_rows($conn); if ($result > 0) { echo json_encode(1); // alterou o servico } else { $geral->logErro(date('d/m/Y|H:i:s'), @$_SERVER[REQUEST_URI], 'AlterarServico', mysqli_error($conn)); echo json_encode(0); // não alterou o servico } } //} ?> O problema é que quando clico no botão Salvar, não acontece nada - se eu colocar um alert qualquer na função click, só pra saber se está chegando, também não da nada. E está da mesma forma que o cadastro de serviço, que funciona perfeitamente.

      Bom, é isso pessoal, tentei ser o mais breve e especifico possível. Qualquer ajuda é bem vinda, obrigado a todos, desde já.
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.