Ficou um pouco confuso este post, mas vejamos se consigo esclarecer um
pouco as coisas em relação ao MVC.
ViewModel serve para vc receber os dados na página ... ela, por si só,
não faz nada ... é um objeto burro .. uma DTO (Data Transfer Object).
Como EU gosto de trabalhar.
Quando a action é para carregar uma página inteira, crio uma Página
aspx. E nela uso "partial controls" (ascx), tantos quantos necessários
para cada um ter UMA única finalidade.
Vc teria a opção de ter a seguinte estrutura:
- Artigo.aspx (ViewModelArtigo)
- Comentarios.ascx (List<ViewModelComentario>)
- Comentario.ascx (ViewModelComentario)
Desta forma:
ViewModelArtigo - Codigo
- Titulo
- Corpo
- List<ViewModelComentario>
ViewModelComentario - Codigo
- Data
- Descricao
Tua "partial view" Comentarios.ascx teria apenas um loop para carregar
a "partial view" Comentario.ascx, passando um item do "List<>".
Desta forma vc poderia fazer a inclusão do comentário via ajax e
colocar este comentário no fim dos comentários usando o "append" do
jquery ... teu método de post de comentário poderia retornar a partial
view Comentario.ascx com os dados do comentário postado, assim vc
mantém a mesma estrutura e pode reaproveitá-la.
Mas veja bem, esta é apenas uma forma. Vc poderia fazer isso de várias
formas
Se quer usar um HtmlHelper vc até pode, mas não acho legal. Bastaria
vc criar um método de extensão para a VierUserControl que recebe as
informações do comentário e monta um html padrão. (ou então criar um
método de extensão para tua modelview)
Em relação ao HtmlHelper, gostaria de deixar minha opinião. Use-o para
coisas genéricas, como montar uma listagem de dados em formato padrão,
inserir um componente comum em várias páginas. Coisas específicas,
como inserir um comentário, por exemplo, deixe em usercontrol, que
serve justamente para isso.
Bem, qualquer dúvida mais pode escrever para meu e-mail ... como estou
na corrida, as vezes demoro a acessar a lista.
[]'s
Ricardo Rocha
Porto Alegre - RS
On 3 set, 18:58, Felipe Oriani <
fbori...@gmail.com> wrote:
> Oi Rodrigo,
>
> Para adicionar um novo comentário, usando HtmlHelper não vejo uma forma de
> ser feita! Você teria que enviar (submit) as informações de seu formulário
> para uma action (seja por uma outra ViewModel de formulário, FormCollection,
> etc...) que deve persistir este comentário em algum lugar (banco de dados) e
> redirecionaria o usuário novamente ao artigo. Depois disso quando seu
> usuário solicitar novamente à página, e como você está preenchendo sua
> IEnumerable<Comentario> de um lugar já persistido, é conseqüente ter este
> comentário na lista (isso caso você não programe alguma regra , ex: para ser
> aprovado).
>
> Você não teria responsabilidades na propriedade do ViewModel, vejo este
> ViewModel apenas como transferência de informações. Prencher comentários
> aprovados ou não, vejo como uma responsabilidade de um Repositório, lá você
> poderia ter um método "ObterComentariosAprovados(int idArtigo)". Uma coisa é
> você ter uma View tipada específica (sem renderizar partial views), outra é
> você ter uma View que necessita de diversos objetos (seja para renderizar em
> Partialview, ou não) que ai sim vejo necessidade de um ViewModel com vários
> propriedades (que são preenchidas no controller ou uma camada de serviços).
>
> Pesquise também sobre ModelBinder, ainda estou estudando isso... mas
> acredito que resolva seu problema para receber objetos complexos em uma
> Action.
>
> []'s
>
> 2010/9/3 Rodrigo Macedo <
rodrigo....@gmail.com>
>
>
>
> > Pois é, entendi. E obrigado por responder.
>
> > Eu estou usando o modelo direto do meu domínio. Acho que o ViewModel pode
> > ser interessante na view parcial, já que eu posso ter no futuro outra
> > funcionalidade que eu habilite os comentários, o que facilitaria o reuso.
>
> > Então, pra facilitar, vamos considerar que só exista agora, essa view
> > parcial. E este é o ViewModel.
>
> > public class ArtigoViewModel {
>
> > public IEnumerable<Comentario> Comentarios { get; set; }
> > }
>
> > Talvez não esteja enxergando certo... No formulário para adicionar um novo
> > comentário, como faria adicionar um novo comentário a esse vetor de
> > Comentario usando o Html helper? Outra... Neste caso eu teria duas
> > responsabilidades na propriedade Comentario? Agrupar TODOS os comentários do
> > controller para view, e servir de meio campo pra adicionar novos da view
> > para o controller. Ou não?
>
> > Outra dúvida: você disse é que eu posso enviar outro objeto mesmo que não
> > seja o que eu declarei.
> > Como faço para passar um objeto complexo diferente do declarado?
>
> > Obrigado, Felipe.
> > Em 3 de setembro de 2010 16:54, Felipe Oriani <
fbori...@gmail.com>escreveu:
>
> > Onde eu disse "assim em sua action você receberia uma instância deste
> >> viewmodel,"
>
> >> leia-se: "assim em sua action você retornaria uma instância deste
> >> viewmodel e na view você recebe.. pegando assim várias informações"
>
> >> 2010/9/3 Felipe Oriani <
fbori...@gmail.com>
>
> >> Olá Rodrigo, não sei se entendi direito mas tentarei ajudar...
>
> >>> Existe um conceito/prática chamado ViewModel, que você pode aplicar em
> >>> suas views, deixando elas tipadas, um exemplo disso, você poderia criar uma
> >>> classe (viewmodel), da seguinte forma:
>
> >>> public class ArtigoViewModel {
> >>> public Artigo Artigo { get; set; }
> >>> public IEnumerable<Comentario> Comentarios { get; set; }
> >>> }
>
> >>> E tipar sua view com este cara... assim em sua action você receberia uma
> >>> instância deste viewmodel, e trabalharia com os dados. Claro que apenas
> >>> estou ilustrando você poderia em seu objeto de domínio ter uma lista de
> >>> comentários, mas este é o conceito que aplico quando preciso de várias
> >>> informações em uma mesma página.
>
> >>> Quando você tem um formulário em uma view que dispara um request
> >>> (get/post) para uma outra action, nada impede você de receber uma instância
> >>> diferente daquela que a página é tipada. Em último caso, você pode usar o
> >>> FormCollection...
>
> >>> Espero que tenha ajudado de alguma forma
> >>> []'s
>
> >>> 2010/9/3 Rodrigo Macedo <
rodrigo....@gmail.com>
> >>> @felipeoriani <
http://www.twitter.com/felipeoriani> |
> >>>
felipeoriani.com.br |
fbori...@gmail.com
>
> >>> "...Trabalhe quanto puder, tornando-se útil quanto possível..." , por
> >>> André Luiz
>
> >> --
> >> ______________________________________
> >> Felipe B. Oriani
> >> @felipeoriani <
http://www.twitter.com/felipeoriani> |
felipeoriani.com.br|
> >>
fbori...@gmail.com
> @felipeoriani <
http://www.twitter.com/felipeoriani> |
felipeoriani.com.br |
>
fbori...@gmail.com