AJUDA PLEASE: ASP.NET MVC3 não gera HtmlAttributes

22 views
Skip to first unread message

HJ

unread,
Jan 31, 2012, 5:40:36 AM1/31/12
to .Net Architects
Pessoal,

Estou usando POCO entities com atributos como StringLength, gerados
via T4. Um exemplo de minhas classes é:

public partial class Employees
{
#region Primitive Properties
[Required]
[StringLength(20)]
[MaxLength(20)]
[DataType(DataType.Text)]
public virtual string LastName
{
get;
set;
}

As entidades POCO estão em um projeto próprio denominado Model.
O contexto (ObjectContext) também é gerado por um TT e está um projeto
próprio denominado Repository.
O projeto ASP.NET MVC está em seu próprio projeto e este possui
referencias para os outros 2.

Para ler os atributos da classe, estou usando essa técnica
http://buildstarted.com/2010/09/14/creating-your-own-modelmetadataprovider-to-handle-custom-attributes/

O resultado esperado é que o html deveria ser gerado com os atributos
que eu quero, tal como <input .... maxlength=20/>

O que acontece é:
- Se tudo está junto no mesmo projeto, funciona como esperado
- Se a solution está estruturada em vários projetos, com cada coisa no
seu lugar, os metadados são ignorados, nada é gerado. Eu consigo ver
que o código é executado com sucesso, mas nada é gerado no html.
Nenhum erro ocorre também.

Já chequei referencias, sem sucesso. Também pode ser que eu esteja no
caminho errado... Alguma dica?

Abs.

Vinicius de Melo Rocha

unread,
Jan 31, 2012, 5:51:50 AM1/31/12
to dotnetar...@googlegroups.com
Esses atributos, tipo o  Required, embora estejam no namespace System.ComponentModel.DataAnnotations, estão no assembly System.Web.Mvc. Se você separar em camadas, terá que adicionar a referência ao System.Web.Mvc aos outros projetos que você quer manipular esses atributos. Nesses caso, trabalhar com ViewModel parece ser uma boa.

2012/1/31 HJ <hamilt...@gmail.com>

--
Você recebeu esta mensagem porque faz parte do grupo .Net Architects hospedado no Google Groups.
Para postar envie uma mensagem para dotnetar...@googlegroups.com
Para sair do grupo envie uma mensagem para dotnetarchitec...@googlegroups.com
Para mais opções visite o grupo em http://groups.google.com/group/dotnetarchitects?hl=pt-br



--
Vinicius Rocha

Juan Lopes

unread,
Jan 31, 2012, 7:29:34 AM1/31/12
to dotnetar...@googlegroups.com
É POCO ou tem atributos? Acho que são coisas mutuamente exclusivas.

2012/1/31 Vinicius de Melo Rocha <vmr...@gmail.com>

Daniel Moreira Yokoyama

unread,
Jan 31, 2012, 7:46:41 AM1/31/12
to dotnetar...@googlegroups.com
Não necessariamente, Juan.

O benefício do POCO é não depender de uma tecnologia específica (como EF4, ou NH, ou MVC). Pensando nisso, o uso de Notations até cumpre bem o mesmo propósito, mesmo não fazendo parte do mscorlib, vc ainda tem as mesmas vantagens do POCO (e eu não acho  contraditório dizer que ainda é POCO, afinal, enquanto vc usar o .Net, sempre vai depender do .Net framework).



Atenciosamente,

Daniel Moreira Yokoyama.
@dmyoko
 
Blogs:
Getting Sharper (C#, Arquitetura de Software e outras coisas mais)
http://gettingsharper.wordpress.com/
 
Eis o Cristo... e jaz o Cristão (Cristianismo sem Religiosidade)
 


Stay Sharp!

Ricardson Albuquerque

unread,
Jan 31, 2012, 7:55:10 AM1/31/12
to dotnetar...@googlegroups.com
Hamilton, seria bom gerar os dataanotation em outra classe de metadados, iria manter as entidades poco como poco.

2012/1/31 Daniel Moreira Yokoyama <moreira....@gmail.com>



--
Ricardson Albuquerque

Juan Lopes

unread,
Jan 31, 2012, 8:02:27 AM1/31/12
to dotnetar...@googlegroups.com
Discordo de você, Daniel, mas é um ponto de vista válido o que você colocou. De qualquer forma, queria chamar a atenção para o fato de que o "POCO" dele é gerado por T4.

2012/1/31 Daniel Moreira Yokoyama <moreira....@gmail.com>
Não necessariamente, Juan.

Daniel Moreira Yokoyama

unread,
Jan 31, 2012, 8:05:35 AM1/31/12
to dotnetar...@googlegroups.com
I see...

Me chamem de chato, mas eu ainda não consigo suportar T4 pra este fim. (Parece coisa de código genérico demais... bolovo)... eu sei que sou chato.

Atenciosamente,

Daniel Moreira Yokoyama.
@dmyoko
 
Blogs:
Getting Sharper (C#, Arquitetura de Software e outras coisas mais)
http://gettingsharper.wordpress.com/
 
Eis o Cristo... e jaz o Cristão (Cristianismo sem Religiosidade)
 


Stay Sharp!



Daniel

unread,
Jan 31, 2012, 9:53:28 AM1/31/12
to dotnetar...@googlegroups.com
Eu ate hoje faco minhas validacoes na mao, se nao fico preso a isso ai, uma dll Web.

Vinicius Quaiato

unread,
Feb 1, 2012, 11:43:27 AM2/1/12
to dotnetar...@googlegroups.com
se tem esses attributes aí né poco não meu fi

HJ

unread,
Feb 1, 2012, 3:29:15 PM2/1/12
to .Net Architects
Eu fiz menção a POCO pois todos os Code Generations do ADO.NET levam
esse nome. Até esse que adiciona atributos às classes geradas pelos
T4.

On Jan 31, 10:29 am, Juan Lopes <m...@juanlopes.net> wrote:
> É POCO ou tem atributos? Acho que são coisas mutuamente exclusivas.
>
> 2012/1/31 Vinicius de Melo Rocha <vmro...@gmail.com>
>
>
>
> > Esses atributos, tipo o  Required, embora estejam no namespace
> > System.ComponentModel.DataAnnotations, estão no assembly System.Web.Mvc. Se
> > você separar em camadas, terá que adicionar a referência ao System.Web.Mvc
> > aos outros projetos que você quer manipular esses atributos. Nesses caso,
> > trabalhar com ViewModel parece ser uma boa.
>
> > 2012/1/31 HJ <hamiltonj...@gmail.com>
>
> >> Pessoal,
>
> >> Estou usando POCO entities com atributos como StringLength, gerados
> >> via T4. Um exemplo de minhas classes é:
>
> >>    public partial class Employees
> >>    {
> >>        #region Primitive Properties
> >>        [Required]
> >>        [StringLength(20)]
> >>        [MaxLength(20)]
> >>        [DataType(DataType.Text)]
> >>        public virtual string LastName
> >>        {
> >>            get;
> >>            set;
> >>        }
>
> >> As entidades POCO estão em um projeto próprio denominado Model.
> >> O contexto (ObjectContext) também é gerado por um TT e está um projeto
> >> próprio denominado Repository.
> >> O projeto ASP.NET MVC está em seu próprio projeto e este possui
> >> referencias para os outros 2.
>
> >> Para ler os atributos da classe, estou usando essa técnica
>
> >>http://buildstarted.com/2010/09/14/creating-your-own-modelmetadatapro...
> >http://groups.google.com/group/dotnetarchitects?hl=pt-br- Hide quoted text -
>
> - Show quoted text -

HJ

unread,
Feb 1, 2012, 3:29:38 PM2/1/12
to .Net Architects
Concordo.

On Jan 31, 10:46 am, Daniel Moreira Yokoyama
<moreira.yokoy...@gmail.com> wrote:
> Não necessariamente, Juan.
>
> O benefício do POCO é não depender de uma tecnologia específica (como EF4,
> ou NH, ou MVC). Pensando nisso, o uso de Notations até cumpre bem o mesmo
> propósito, mesmo não fazendo parte do mscorlib, vc ainda tem as mesmas
> vantagens do POCO (e eu não acho  contraditório dizer que ainda é POCO,
> afinal, enquanto vc usar o .Net, sempre vai depender do .Net framework).
>
> Atenciosamente,
>
> Daniel Moreira Yokoyama.
> @dmyokohttp://twitter.com/dmyoko
>
> Blogs:
> Getting Sharper (C#, Arquitetura de Software e outras coisas mais)http://gettingsharper.wordpress.com/
>
> Eis o Cristo... e jaz o Cristão (Cristianismo sem Religiosidade)http://eisocristo.wordpress.com
>
> Stay Sharp!
>
> Em 31 de janeiro de 2012 10:29, Juan Lopes <m...@juanlopes.net> escreveu:
>
>
>
> > É POCO ou tem atributos? Acho que são coisas mutuamente exclusivas.
>
> > 2012/1/31 Vinicius de Melo Rocha <vmro...@gmail.com>
>
> >> Esses atributos, tipo o  Required, embora estejam no namespace
> >> System.ComponentModel.DataAnnotations, estão no assembly System.Web.Mvc. Se
> >> você separar em camadas, terá que adicionar a referência ao System.Web.Mvc
> >> aos outros projetos que você quer manipular esses atributos. Nesses caso,
> >> trabalhar com ViewModel parece ser uma boa.
>
> >> 2012/1/31 HJ <hamiltonj...@gmail.com>
>
> >>> Pessoal,
>
> >>> Estou usando POCO entities com atributos como StringLength, gerados
> >>> via T4. Um exemplo de minhas classes é:
>
> >>>    public partial class Employees
> >>>    {
> >>>        #region Primitive Properties
> >>>        [Required]
> >>>        [StringLength(20)]
> >>>        [MaxLength(20)]
> >>>        [DataType(DataType.Text)]
> >>>        public virtual string LastName
> >>>        {
> >>>            get;
> >>>            set;
> >>>        }
>
> >>> As entidades POCO estão em um projeto próprio denominado Model.
> >>> O contexto (ObjectContext) também é gerado por um TT e está um projeto
> >>> próprio denominado Repository.
> >>> O projeto ASP.NET MVC está em seu próprio projeto e este possui
> >>> referencias para os outros 2.
>
> >>> Para ler os atributos da classe, estou usando essa técnica
>
> >>>http://buildstarted.com/2010/09/14/creating-your-own-modelmetadatapro...

HJ

unread,
Feb 1, 2012, 3:31:01 PM2/1/12
to .Net Architects
Eu pensei nisso, porém eu teria que ter o mesmo número de classes só
para as anottations... apesar de parecer ser semanticamente correto,
não é nada prático. E eu sacrifico alguns conceitos filosóficos de
engenharia de software em favor da praticidade sem qualquer peso na
consciência.

On Jan 31, 10:55 am, Ricardson Albuquerque <greadcadi...@gmail.com>
wrote:
> Hamilton, seria bom gerar os dataanotation em outra classe de metadados,
> iria manter as entidades poco como poco.
>
> 2012/1/31 Daniel Moreira Yokoyama <moreira.yokoy...@gmail.com>
>
>
>
>
>
> > Não necessariamente, Juan.
>
> > O benefício do POCO é não depender de uma tecnologia específica (como EF4,
> > ou NH, ou MVC). Pensando nisso, o uso de Notations até cumpre bem o mesmo
> > propósito, mesmo não fazendo parte do mscorlib, vc ainda tem as mesmas
> > vantagens do POCO (e eu não acho  contraditório dizer que ainda é POCO,
> > afinal, enquanto vc usar o .Net, sempre vai depender do .Net framework).
>
> > Atenciosamente,
>
> > Daniel Moreira Yokoyama.
> > @dmyoko
> >http://twitter.com/dmyoko
>
> > Blogs:
> > Getting Sharper (C#, Arquitetura de Software e outras coisas mais)
> >http://gettingsharper.wordpress.com/
>
> > Eis o Cristo... e jaz o Cristão (Cristianismo sem Religiosidade)
> >http://eisocristo.wordpress.com
>
> > Stay Sharp!
>
> > Em 31 de janeiro de 2012 10:29, Juan Lopes <m...@juanlopes.net> escreveu:
>
> > É POCO ou tem atributos? Acho que são coisas mutuamente exclusivas.
>
> >> 2012/1/31 Vinicius de Melo Rocha <vmro...@gmail.com>
>
> >>> Esses atributos, tipo o  Required, embora estejam no namespace
> >>> System.ComponentModel.DataAnnotations, estão no assembly System.Web.Mvc. Se
> >>> você separar em camadas, terá que adicionar a referência ao System.Web.Mvc
> >>> aos outros projetos que você quer manipular esses atributos. Nesses caso,
> >>> trabalhar com ViewModel parece ser uma boa.
>
> >>> 2012/1/31 HJ <hamiltonj...@gmail.com>
>
> >>>> Pessoal,
>
> >>>> Estou usando POCO entities com atributos como StringLength, gerados
> >>>> via T4. Um exemplo de minhas classes é:
>
> >>>>    public partial class Employees
> >>>>    {
> >>>>        #region Primitive Properties
> >>>>        [Required]
> >>>>        [StringLength(20)]
> >>>>        [MaxLength(20)]
> >>>>        [DataType(DataType.Text)]
> >>>>        public virtual string LastName
> >>>>        {
> >>>>            get;
> >>>>            set;
> >>>>        }
>
> >>>> As entidades POCO estão em um projeto próprio denominado Model.
> >>>> O contexto (ObjectContext) também é gerado por um TT e está um projeto
> >>>> próprio denominado Repository.
> >>>> O projeto ASP.NET MVC está em seu próprio projeto e este possui
> >>>> referencias para os outros 2.
>
> >>>> Para ler os atributos da classe, estou usando essa técnica
>
> >>>>http://buildstarted.com/2010/09/14/creating-your-own-modelmetadatapro...
> Ricardson Albuquerque- Hide quoted text -

HJ

unread,
Feb 1, 2012, 3:32:29 PM2/1/12
to .Net Architects
Interessante, e isso explicaria porque funciona quando estão no mesmo
projeto. Irei tentar essa abordagem.

On Jan 31, 8:51 am, Vinicius de Melo Rocha <vmro...@gmail.com> wrote:
> Esses atributos, tipo o  Required, embora estejam no namespace
> System.ComponentModel.DataAnnotations, estão no assembly System.Web.Mvc. Se
> você separar em camadas, terá que adicionar a referência ao System.Web.Mvc
> aos outros projetos que você quer manipular esses atributos. Nesses caso,
> trabalhar com ViewModel parece ser uma boa.
>
> 2012/1/31 HJ <hamiltonj...@gmail.com>
>
>
>
>
>
> > Pessoal,
>
> > Estou usando POCO entities com atributos como StringLength, gerados
> > via T4. Um exemplo de minhas classes é:
>
> >    public partial class Employees
> >    {
> >        #region Primitive Properties
> >        [Required]
> >        [StringLength(20)]
> >        [MaxLength(20)]
> >        [DataType(DataType.Text)]
> >        public virtual string LastName
> >        {
> >            get;
> >            set;
> >        }
>
> > As entidades POCO estão em um projeto próprio denominado Model.
> > O contexto (ObjectContext) também é gerado por um TT e está um projeto
> > próprio denominado Repository.
> > O projeto ASP.NET MVC está em seu próprio projeto e este possui
> > referencias para os outros 2.
>
> > Para ler os atributos da classe, estou usando essa técnica
>
> >http://buildstarted.com/2010/09/14/creating-your-own-modelmetadatapro...
>
> > O resultado esperado é que o html deveria ser gerado com os atributos
> > que eu quero, tal como <input .... maxlength=20/>
>
> > O que acontece é:
> > - Se tudo está junto no mesmo projeto, funciona como esperado
> > - Se a solution está estruturada em vários projetos, com cada coisa no
> > seu lugar, os metadados são ignorados, nada é gerado. Eu consigo ver
> > que o código é executado com sucesso, mas nada é gerado no html.
> > Nenhum erro ocorre também.
>
> > Já chequei referencias, sem sucesso. Também pode ser que eu esteja no
> > caminho errado... Alguma dica?
>
> > Abs.
>
> > --
> > Você recebeu esta mensagem porque faz parte do grupo .Net Architects
> > hospedado no Google Groups.
> > Para postar envie uma mensagem para dotnetar...@googlegroups.com
> > Para sair do grupo envie uma mensagem para
> > dotnetarchitec...@googlegroups.com
> > Para mais opções visite o grupo em
> >http://groups.google.com/group/dotnetarchitects?hl=pt-br
>
> --
> Vinicius Rocha- Hide quoted text -
Reply all
Reply to author
Forward
0 new messages