none
ASP.NET MVC - Strongly Typed Global ViewData RRS feed

Respostas

  • Opa, se o problema é esse, então está resolvido.

    Cria um modelo que contém o que vc vai precisar, e mais uma propriedade genérica, por exemplo:

    class ModeloGenerico<T>
    {
         public Usuario UsuarioAutenticado {get;set;}
         public string NomeEmpresa {get;set;}
         public T Modelo {get;set;}
    }

    Aí você cria um factory pra ele:
    class CriadorDeModeloGenerico
    {
       public void CriarModelo<T>(T modelo)
       {
          var modelo = (ModeloGenerico<T>)Activator.CreateInstance(typeof(ModeloGenerico<T>));
          modelo.UsuarioAutenticado = ObterUsuario();//implementar em algum lugar
          modelo.NomeEmpresa = ObterNomeEmpresa();//implementar em algum lugar
          modelo.Modelo = modelo;
          return modelo;
       }
    }

    O Controler cria o modelo específico, passa pro criador de modelo genérico, e repassa o modelo genérico pra view.

    Na View, você criar viewpages<ModeloGenerico<ModeloEspecifico>>

    Mais ou menos isso. Espero que tenha dado pra entender.
    Genéricos são algo maravilhoso.
    Resolve assim?
    Giovanni Bassi, Microsoft MVP, MCSD, MCPD, CSM, Arquiteto de software - http://www.giovannibassi.com
    • Marcado como Resposta Tomas19 sexta-feira, 10 de julho de 2009 06:10
    sexta-feira, 10 de julho de 2009 04:38
    Moderador

Todas as Respostas

  • Achei muita volta. Porque não usar uma hierarquia de classes normal. Qual o ganho?

    Giovanni Bassi, Microsoft MVP, MCSD, MCPD, CSM, Arquiteto de software - http://www.giovannibassi.com
    sexta-feira, 10 de julho de 2009 01:35
    Moderador
  • Opa! E aê Giovanni!
    Ainda não encontrei uma maneira onde eu consiga disponibilizar alguns dados em todas as classes ViewModel, para usá-los nas Views.
    Por exemplo, em todas as minhas Views eu gostaria de ter em mãos algumas informações do usuário (se está autenticado, o username, o e-mail,...), mas ainda não encontrei essa "hierarquia de classes normal" onde eu possa dar um bind dessas informações em um único lugar e poder usá-las em todas as minhas Views.
    Em vários exemplos que li, é sempre criado um BaseController com essas propriedades que eu quero acessar nas Views e essas propriedades são populadas em um método chamado OnActionExecuted. Até aí eu acredito que estou fazendo as coisas corretamente, certo? A partir dai que está o problema. Não sei como acessar essas informações nas Views (quando escrevo <%= Model.UserName %>).
    sexta-feira, 10 de julho de 2009 03:30
  • Opa, se o problema é esse, então está resolvido.

    Cria um modelo que contém o que vc vai precisar, e mais uma propriedade genérica, por exemplo:

    class ModeloGenerico<T>
    {
         public Usuario UsuarioAutenticado {get;set;}
         public string NomeEmpresa {get;set;}
         public T Modelo {get;set;}
    }

    Aí você cria um factory pra ele:
    class CriadorDeModeloGenerico
    {
       public void CriarModelo<T>(T modelo)
       {
          var modelo = (ModeloGenerico<T>)Activator.CreateInstance(typeof(ModeloGenerico<T>));
          modelo.UsuarioAutenticado = ObterUsuario();//implementar em algum lugar
          modelo.NomeEmpresa = ObterNomeEmpresa();//implementar em algum lugar
          modelo.Modelo = modelo;
          return modelo;
       }
    }

    O Controler cria o modelo específico, passa pro criador de modelo genérico, e repassa o modelo genérico pra view.

    Na View, você criar viewpages<ModeloGenerico<ModeloEspecifico>>

    Mais ou menos isso. Espero que tenha dado pra entender.
    Genéricos são algo maravilhoso.
    Resolve assim?
    Giovanni Bassi, Microsoft MVP, MCSD, MCPD, CSM, Arquiteto de software - http://www.giovannibassi.com
    • Marcado como Resposta Tomas19 sexta-feira, 10 de julho de 2009 06:10
    sexta-feira, 10 de julho de 2009 04:38
    Moderador
  • Opa!!!!
    Peguei a idéia!
    Muito obrigado mesmo Giovanni.

    []'s
    sexta-feira, 10 de julho de 2009 06:09