2010-01-20 13 views
2

Donc, dans mon Project.Repository de projet mvc J'aiproblème avec DataAnnotations en classe partielle

[MetadataType(typeof(FalalaMetadata))] 
public partial class Falala 
{ 
    public string Name { get; set; } 

    public string Age { get; set; } 

    internal sealed class FalalaMetadata 
    { 
     [Required(ErrorMessage="Falala requires name.")] 
     public string Name { get; set; } 

     [Required(ErrorMessage = "Falala requires age.")] 
     public string Age { get; set; } 
    } 
} 

J'utilise Falala comme modèle dans mes Project.Web.AccountControllers, et utiliser une méthode pour obtenir des violations. travaillé quand je Validating eu

public class Falala 
{ 
    [Required] 
    public string Name { get; set; } 

    [Required(ErrorMessage="error")] 
    public string Age { get; set; } 
} 

mais pas après avoir utilisé la classe partielle d'en haut. J'ai vraiment besoin d'utiliser une classe partielle. Qu'est-ce que je fais mal ici?

Merci!

+0

Je collais votre code dans une nouvelle application MVC et la validation fonctionne très bien. Pouvez-vous poster votre contrôleur et afficher le code? – jfar

Répondre

1

J'ai tendance à utiliser les classes Metadata suivies.

[MetadataType(typeof(FalalaMetadata))] 
public partial class Falala 
{ 
    public string Name { get; set; } 

    public string Age { get; set; } 
} 
public class FalalaMetadata 
{ 
    [Required(ErrorMessage="Falala requires name.")] 
    public string Name { get; set; } 

    [Required(ErrorMessage = "Falala requires age.")] 
    public string Age { get; set; } 
} 

Ce qui fonctionne bien pour moi.

Les éléments suivants doivent également travailler (et est une meilleure façon de mettre en œuvre des classes de métadonnées):

[MetadataTypeAttribute(typeof(Falala.FalalaMetaData))] 
public partial class Falala 
{ 
    internal sealed class FalalaMetadata 
    { 
     [Required(ErrorMessage="Falala requires name.")] 
     public string Name { get; set; } 

     [Required(ErrorMessage = "Falala requires age.")] 
     public string Age { get; set; } 
    } 
} 
+0

Ça ne marche toujours pas pour moi. Merci quand même pour vôtre aide. – maze

+0

C'est bizarre, mes projets ont tendance à être remplis avec des classes partielles de services web et je n'ai aucun problème pour assigner des classes de méta-données. Quelle est la version de DataAnnotation avec laquelle vous travaillez? –

+0

System.ComponentModel.DataAnnotations.dll v3.6. Merci. – maze

0

je suis tombé sur un problème similaire et finalement obtenu ce travail en mettant à la fois la classe modèle et les métadonnées « buddy "classe dans le même espace de noms, même si mes références semblaient correctes. Je suis en quelque sorte un .net noob bien que je ne sois pas vraiment à l'aise avec les espaces de noms, ça pourrait être autre chose.

1

Est-ce que Internal sur la classe imbriquée peut être la raison ...? J'ai eu un problème similaire et il semblait tout se résumer à ne pas rendre public les champs individuels dans la classe de métadonnées imbriquées - se demander si faire toute la classe interne provoque le même problème?

0

Je ne sais pas si cette aide, mais j'ai eu un problème similaire et passer des jours là-dessus. À la fin c'était juste un changement mineur qui a fait l'affaire pour moi.

j'ai changé UnobtrusiveJavaScriptEnabled false dans le fichier de configuration

Bonne chance