REAPROVEITANDO CÓDIGO RAZOR - ASP MVC

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

REAPROVEITANDO CÓDIGO RAZOR - ASP MVC

ASP.NET

 Compartilhe  Compartilhe  Compartilhe
#478951 - 06/01/2018 18:24:43

DS2T
BARRA MANSA
Cadast. em:Novembro/2010


Última edição em 06/01/2018 20:26:57 por DS2T

Boa noite!
Tudo bem com vocês?

Desde que comecei a me aprofundar no desenvolvimento Web, especificamente ASP.NET MVC, tem algo me incomodando sobre o Razor. Na verdade, é algo que vem desde o WebForms:

Reaproveitamento de código na criação de elementos dinâmicos.

Exemplificando:

Vamos supor que temos uma tabela na tela.
No Razor, nós usaríamos algo parecido com isso:



@foreach (var endereco in (List<Endereco>)Modelo.Enderecos)
{
                                <tr>
                                    <td class="text-center">@endereco.Logradouro</td>
                                    <td class="text-center">@endereco.Numero</td>
                                    <td class="text-center">@endereco.Bairro</td>
                                    <td class="text-center">@endereco.NomCidade</td>
                                    <td class="text-center">@endereco.Uf</td>
                                </tr>
}


Agora vamos supor, que na nossa tela, exista a opção para adicionar uma nova linha.
Nesse caso, ao meu ver, teríamos duas opções:

Opção 1 - Fazer uma requisição para o servidor e retornar uma PartialView com o novo <tr>. (Note que desta forma, o <tr> colocado no exemplo acima, também seria uma Partial)

Opção 2 - Criar o <tr> via Javascript.


Caso a gente realize a persistência dos dados na hora da inserção da nova linha, a solução 1 é aceitável, pois teríamos um bom aproveitamento de código. Porém, se a persistência for feita apenas depois, acredito que seria uma solução meio "porca", uma vez que estaríamos fazendo uma requisição só para retornar nosso código html. Não sou um expert em Web, mas diria que isso não é uma solução aceitável.

Então passamos para a solução 2. Criar o elemento via javascript.  Aí entramos no problema de ter código repetido. Vamos supor que eu queira retirar o estilo "text-center" de alguma coluna. Eu teria que fazer isso tanto no código Razor quanto no código javascript. Aí acabo achando uma solução terrível também.

Para contornar isso, pensei em fazer o seguinte:

Quando o código Razor for executado e a página renderizada, colocar uma div oculta com um "modelo" da linha. Assim teria toda a estrutura da linha, e quando fosse adicionar, eu apenas preencheria o valor de cada uma. Porém, essa solução tem dois problemas:  Se na criação da linha tiver alguma lógica dinâmica (coluna aparece/desaparece dependendo de um valor), eu também teria que replicar a lógica pro javascript. Fora que estou enviando dados a mais desnecessários ao usuário...


Enfim, alguém tem uma solução para isso?

Grande abraço!


"Cansei de frases intelectuais" - Eu mesmo


#478953 - 06/01/2018 23:08:37

KERPLUNK
RIO GRANDE DO SUL
Cadast. em:Junho/2009


Membro da equipe
Entendo perfeitamente seu dilema, já passei dezenas de vezes por situações assim e temo dizer que até hoje não encontrei nenhuma solução que fosse realmente eficaz. Isto é, não com MVC(razor).

_______________________________________________________________________
Gostaria de ter seu sistema Desktop "traduzido" para uma interface web? Podemos conversar...
Virei Oráculo!
The end is nigh, be ready for the nukes!


#478960 - 07/01/2018 15:17:14

DS2T
BARRA MANSA
Cadast. em:Novembro/2010


Entendo perfeitamente seu dilema, já passei dezenas de vezes por situações assim e temo dizer que até hoje não encontrei nenhuma solução que fosse realmente eficaz. Isto é, não com MVC(razor).


Então, eu estou disposto a abandonar o Razor para ter essa facilidade rs
Mas a solução que eu tenho é ruim demais. Talvez ruim nem seja a palavra certa, acho que é "viajada".

A ideia seria criar tudo no cliente. O servidor nem enviaria o html para mim, enviaria apenas os dados via Json. E no "documento.ready" eu sairia criando a página (criando tudo via javascript na hora).
Por um lado vai ser bom, porque aí deixo o servidor completamente separado da minha View... Por outro, eu fico meio preocupado com a abordagem porque nunca vi ninguém falar dela (talvez por eu ser iniciante).

Você usou alguma tecnologia para resolver isso?
As vezes vejo o pessoal falando do "Angular" ou "ReactJS"...  eu cheguei a dar uma olhada no Angular, mas confesso que desanimei com a dependência do tal do Nodejs...

Enfim, qualquer luz será muito bem vinda.

Abração!
Feliz 2018!

"Cansei de frases intelectuais" - Eu mesmo


#478962 - 07/01/2018 16:58:32

KERPLUNK
RIO GRANDE DO SUL
Cadast. em:Junho/2009


Membro da equipe
Angular não é necessariamente dependente do Node, ele usa os repositórios mas é client side.

_______________________________________________________________________
Gostaria de ter seu sistema Desktop "traduzido" para uma interface web? Podemos conversar...
Virei Oráculo!
The end is nigh, be ready for the nukes!


#478985 - 08/01/2018 21:21:38

DS2T
BARRA MANSA
Cadast. em:Novembro/2010


Entendi. Mas ele conseguiria resolver esse meu problema?

"Cansei de frases intelectuais" - Eu mesmo


#478988 - 09/01/2018 09:08:57

KERPLUNK
RIO GRANDE DO SUL
Cadast. em:Junho/2009


Membro da equipe
Do modo como o Angular trabalha sim. Você teria um "List<T>" local que você trabalha da maneira que quiser, incluindo ítem à ítem.

_______________________________________________________________________
Gostaria de ter seu sistema Desktop "traduzido" para uma interface web? Podemos conversar...
Virei Oráculo!
The end is nigh, be ready for the nukes!


 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