[INICIANTE] Ajuda com DIVS e Ajax

Este é meu primeiro post aqui e comecei a estudar realmente com afinco o Yii esta semana. Gostaria da colaboração pois sei que minhas perguntas serão um tanto quanto de novato.

Estou fazendo um controle financeiro e dentre as partes que o compõe existe um controle de fornecedores e clientes, os quais podem ser tanto pessoa física quanto jurídica (isto estou colocando em um activeDropDownList no começo do form para o usuário escolher).

Acontece que se o cliente/fornecedor for pessoa física eu necessito mostrar determinados campos e se o cliente/fornecedor for pessoa jurídica preciso mostrar outros campos.

Eis o problema: Gostaria de saber se há como (e como) ao trocar o tipo de possoa no activeDropDownList estes campos forem mostrados utilizando ajax, bem como as respectivas máscaras e validações de cada campo? ou a saída mais fácil é criar um partial para cada formulário e quando o usuário escolher o tipo de pessoa eu levo ele para a área correta?

Grato

Att. Fernando Gaffo

Olá Fernando,

Acredito que a solução para o teu problema seja dividir esses campos que são diferentes entre os tipos de pessoa em views diferentes, desta maneira ao realizar uma requisição via ajax, conforme mostrado em outros artigos no site você poderá utilizar o método renderPartial dos controllers para renderizar os campos adicionais quando forem necessários.

Espero ter ajudado.

Att,

Cristiano

Eu tenho um caso semelhante e fiz da seguinte forma:

Dividiria os campos entre duas views (Uma pra cada caso), Renderizava as subviews dentro de divs ocultos e apenas mostrava pro usuário com javascript, pra não ter que fazer uma requisição ao servidor toda a hora que o usuário mude de campo.

No seu controller vc pode verificar o que vem da página, pegar a variável do combobox e saber quais valores vão ser alocados nos atributos do model e quais não serão.

Nota:

Se as duas subviews usam o mesmo model, e vc tem campos repetidos, vc terá que mudar o atributo name das tags geradas, senão vai dar um baita problema.