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!


#479432 - 04/02/2018 17:39:09

DS2T
BARRA MANSA
Cadast. em:Novembro/2010


Tenho dado uma olhada em Angular. Criar o ambiente por si só já é meio chatinho.
Vamos ver daqui a alguns meses como me saio.

Fui criado meio leite-com-pera sempre precisando apenas dar um New Solution, IDE sempre ajudando. Esse negócio de ter linha de comando me deixou com pé atrás... Assim como o GIT. Acho estranho como tem um pessoal que tem tara por linha de comando... enfim.

De qualquer forma, valeu Kerplunk.
Deixarei aberto o tópico durante mais algumas horas e fecharei em seguida.

"Cansei de frases intelectuais" - Eu mesmo


#479436 - 04/02/2018 19:36:48

CLEVERTON
SERRINHA
Cadast. em:Dezembro/2003


Membro da equipe
Citação:
Fui criado meio leite-com-pera sempre precisando apenas dar um New Solution, IDE sempre ajudando. Esse negócio de ter linha de comando me deixou com pé atrás... Assim como o GIT. Acho estranho como tem um pessoal que tem tara por linha de comando... enfim.


kkkkkkkkkkkkkkkk
Cara, eu me identifico demais com esse seu trecho.

Mas por outro lado, quando se tem uma equipe maior é uma vantagem por não precisar de máquinas robustas e caras.
Eu particularmente prefiro pagar uma máquina cara pra ter a IDE.

Mas antes de vc aprofundar em Angular, porque não dá um confere em React ?



#479438 - 04/02/2018 20:06:28

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


Membro da equipe
Com React também vai cair no "linha de comando". E é praticamente a mesma coisa que o Angular. Só acho o Angular mais organizado, HTML, CSS e TypeScript(que vai ser compilado em javascript), fica separadinha.

_______________________________________________________________________
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!


#480826 - 12/04/2018 11:32:32

DEVMAICON
PORTO ALEGRE
Cadast. em:Março/2018


Última edição em 12/04/2018 11:35:41 por DEVMAICON

passei por isso esses dias, e escolhi a opcao 2.
criar o tr com javascript.. mas utilize o Clone do Jquery para duplicar a primeira <tr>. sem precisar criar a tr manual no javascript

fiz um exemplo para voce ver.

https://jsfiddle.net/hq05ncbn/

acredito que vá ajudar quem tiver mesmo problema


É hora de "reprogramar"!


#480827 - 12/04/2018 11:36:39

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


Membro da equipe
Com Angular ou React, seria bem fácil fazer o que você quer por que eles suportam o two-way binding. Isto é, um modelo de dados que você pode acessar tanto client->server quando server->client e ambos componentizando essa funcionalidade se você quiser.

_______________________________________________________________________
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