Models no ASP.NET MVC
Olá, blz!?
Estou com uma grande dúvida sobre a questão de models no ASP.NET MVC e gostaria de uma ajuda.
Acontece o seguinte, exemplo (apenas para ilustrar):
- Tenho uma tela de Pesquisa de Cliente(/Cliente/Pesquisa/)
- Tenho uma tela de Cadastro de Cliente (/Cliente/Cadastro/)
- Tenho uma model Cliente ( int idCliente; string nomeCliente; int idEndereco;)
- Tenho uma model Endereco( int idEndereco; int idCidade; string tipo;)
- Tenho uma model Cidade ( int idCidade; string nomeCidade;)
Na tela de cadastro do cliente preciso de um campo onde é possível digitar o nome e ir buscando a cidade, ou ainda seria possível colocar um botão ao lado e ao clicar abrir um bootstrap-modal (ou algo parecido, independente) com um layout para uma engine de busca de cidade (nomecidade, codigoIbge, estado, id....).
Só que na tela de cadastro do cliente eu só posso receber um model, correto? Portanto, só recebo a model 'Cliente'.
Então, como é possível criar algo desse tipo? O maior exemplo que eu conseguir achar foi o Awesome.Mvc, mas é pago;
Essa dúvida foi gerada a partir de um comentário no Curso de ASP.NET MVC - Criando uma Loja Virtual
Estou com uma grande dúvida sobre a questão de models no ASP.NET MVC e gostaria de uma ajuda.
Acontece o seguinte, exemplo (apenas para ilustrar):
- Tenho uma tela de Pesquisa de Cliente(/Cliente/Pesquisa/)
- Tenho uma tela de Cadastro de Cliente (/Cliente/Cadastro/)
- Tenho uma model Cliente ( int idCliente; string nomeCliente; int idEndereco;)
- Tenho uma model Endereco( int idEndereco; int idCidade; string tipo;)
- Tenho uma model Cidade ( int idCidade; string nomeCidade;)
Na tela de cadastro do cliente preciso de um campo onde é possível digitar o nome e ir buscando a cidade, ou ainda seria possível colocar um botão ao lado e ao clicar abrir um bootstrap-modal (ou algo parecido, independente) com um layout para uma engine de busca de cidade (nomecidade, codigoIbge, estado, id....).
Só que na tela de cadastro do cliente eu só posso receber um model, correto? Portanto, só recebo a model 'Cliente'.
Então, como é possível criar algo desse tipo? O maior exemplo que eu conseguir achar foi o Awesome.Mvc, mas é pago;
Essa dúvida foi gerada a partir de um comentário no Curso de ASP.NET MVC - Criando uma Loja Virtual
Davi Ferreira
Curtidas 0
Melhor post
Rodrigo Duclerc
08/02/2018
Oi Davi, nesse caso, acredito que a melhor solução seja você criar mais um controller e uma view apenas para a busca de cidades.
Utilizando uma requisição ajax você pode renderizar esta view dentro do modal e disponibilizar o form de pesquisa.
Perceba que não é necessário trazer dois models para a view, pois são duas views diferentes.
Espero ter ajudado, qualquer coisa é só falar.
Utilizando uma requisição ajax você pode renderizar esta view dentro do modal e disponibilizar o form de pesquisa.
Perceba que não é necessário trazer dois models para a view, pois são duas views diferentes.
Espero ter ajudado, qualquer coisa é só falar.
GOSTEI 1
Mais Respostas
Rodrigo Duclerc
06/02/2018
Olá Davi tudo bom?
Realmente, se você tentar importar dois models na mesma view, receberá uma exception.
Há várias maneiras de se resolver este problema.
Uma delas é passar a referência aos objetos necessários através da ViewBag. Veja:
A ViewBag tem a função de "carregar" informações do Controller para a View. O legal da ViewBag é que suas propriedades são dinâmicas e é possível defini-las na hora.
Dessa forma, você pode resgatar a ViewBag em sua view. Algo como:
Essa é uma forma, existem outras.
Há também como resolver isso fazendo uso de Ajax, em seu caso específico, pois essa funcionalidade de busca de cidade poderia funcionar com uma requisição ajax apontando para outro Controller que fizesse apenas isso: retornar uma lista de cidades em JSON.
Reflita sobre isso e avalie o que seria melhor no seu caso.
Qualquer coisa é só falar.
abs!
Realmente, se você tentar importar dois models na mesma view, receberá uma exception.
Há várias maneiras de se resolver este problema.
Uma delas é passar a referência aos objetos necessários através da ViewBag. Veja:
public ActionResult cadastraCliente()
{
ViewBag.Cliente = GetClienteModel();
ViewBag.Cidades = GetListCidades();
return View();
}
A ViewBag tem a função de "carregar" informações do Controller para a View. O legal da ViewBag é que suas propriedades são dinâmicas e é possível defini-las na hora.
Dessa forma, você pode resgatar a ViewBag em sua view. Algo como:
Nome: @ViewBag.Cliente.Nome
@foreach (var cidade in ViewBag.Cidades){
<option value="@cidade.Nome" >@cidade.Nome</option>
}
Essa é uma forma, existem outras.
Há também como resolver isso fazendo uso de Ajax, em seu caso específico, pois essa funcionalidade de busca de cidade poderia funcionar com uma requisição ajax apontando para outro Controller que fizesse apenas isso: retornar uma lista de cidades em JSON.
Reflita sobre isso e avalie o que seria melhor no seu caso.
Qualquer coisa é só falar.
abs!
GOSTEI 0
Davi Ferreira
06/02/2018
Olá Davi tudo bom?
Realmente, se você tentar importar dois models na mesma view, receberá uma exception.
Há várias maneiras de se resolver este problema.
Uma delas é passar a referência aos objetos necessários através da ViewBag. Veja:
A ViewBag tem a função de "carregar" informações do Controller para a View. O legal da ViewBag é que suas propriedades são dinâmicas e é possível defini-las na hora.
Dessa forma, você pode resgatar a ViewBag em sua view. Algo como:
Essa é uma forma, existem outras.
Há também como resolver isso fazendo uso de Ajax, em seu caso específico, pois essa funcionalidade de busca de cidade poderia funcionar com uma requisição ajax apontando para outro Controller que fizesse apenas isso: retornar uma lista de cidades em JSON.
Reflita sobre isso e avalie o que seria melhor no seu caso.
Qualquer coisa é só falar.
abs!
Realmente, se você tentar importar dois models na mesma view, receberá uma exception.
Há várias maneiras de se resolver este problema.
Uma delas é passar a referência aos objetos necessários através da ViewBag. Veja:
public ActionResult cadastraCliente()
{
ViewBag.Cliente = GetClienteModel();
ViewBag.Cidades = GetListCidades();
return View();
}
A ViewBag tem a função de "carregar" informações do Controller para a View. O legal da ViewBag é que suas propriedades são dinâmicas e é possível defini-las na hora.
Dessa forma, você pode resgatar a ViewBag em sua view. Algo como:
Nome: @ViewBag.Cliente.Nome
@foreach (var cidade in ViewBag.Cidades){
<option value="@cidade.Nome" >@cidade.Nome</option>
}
Essa é uma forma, existem outras.
Há também como resolver isso fazendo uso de Ajax, em seu caso específico, pois essa funcionalidade de busca de cidade poderia funcionar com uma requisição ajax apontando para outro Controller que fizesse apenas isso: retornar uma lista de cidades em JSON.
Reflita sobre isso e avalie o que seria melhor no seu caso.
Qualquer coisa é só falar.
abs!
Isso ajuda bastante.
Mas a ideia seria eu abrir um pagina com o cadastro do cliente... e dentro dessa pagina abrir um modal do bootstrap, por exemplo, e renderizar uma pagina de pesquisa de cidades nesse modal pra poder escolher a cidade que eu vou utilizar na pagina(por tras) do cadastro do cliente.
Isso só pra não precisar abrir um popup via javascript e aguardar o retorno desse popup. Pois muitas pessoas bloqueiam esse tipo de ação no navegador.
GOSTEI 0
Davi Ferreira
06/02/2018
Entendi... tecnicamente eu não preciso de uma model para o modal-bootstrap, apenas de um IList de cidades que posso capturar por ajax. O resto só depende de como vou exibir.
Muito obrigado!
Muito obrigado!
GOSTEI 0
Rodrigo Duclerc
06/02/2018
Exato! Qualquer coisa é só falar!
GOSTEI 0