2010-08-15 7 views
0

J'ai lu et recherché ce problème avec le mécanisme de validation de la bibliothèque d'entreprise. Cette application de formulaires très simple démontre le problème. La classe Metadata est ignorée par le validateur. J'essaie de l'utiliser dans une application MVC avec un Entity Framework..Net 3.5 MetadataType Ignoré lors de l'utilisation du validateur

Ceci est en .NEt 3.5 en utilisant VS 2008 sur XP SP3.

namespace ValidationTest 
{ 
public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void Form1_Load(object sender, EventArgs e) 
    { 

     string longname = "this is much too long to be a name"; 
     Customer2 cust = new Customer2(longname); 

     ValidationResults r = Validation.Validate<Customer2>(cust); 
     if (!r.IsValid) 
     { 
      throw new ArgumentException(); 
     } 
    } 
} 


public partial class Customer2 
{ 

    public string CustomerName; 

    public Customer2(string name) 
    { 

     CustomerName = name; 
    } 

} 

[MetadataType(typeof(CustMetadata))] 
public partial class Customer2 
{ 
} 

public class CustMetadata 
{ 
    [StringLengthValidator(0, 20)] 
    public string CustomerName { get; set; } 
} 

} 

Ils sont tous les deux dans le même fichier à des fins de présentation. Si je déplace StringLengthAttribute vers la classe principale, cela fonctionne.

Toute idée serait grandement appréciée.

Merci

Répondre

1

La question que vous voyez est que dans la CustomerName classe Customer2 est un champ, mais dans la CustomerName classe CustMetadata est une propriété.

Si vous changez CustMetadata à:

public class CustMetadata 
{ 
    [StringLengthValidator(0, 20)] 
    public string CustomerName; 
} 

il fonctionne comme prévu.

Le bloc d'application de validation utilise à la fois le MemberType et le Name lorsqu'il correspond aux métadonnées.

+0

Merci - J'ai essayé cela et je n'ai toujours pas le choix. – Jerry

+1

@Jerry - J'ai copié votre exemple de code et cela fonctionne bien (il lance une ArgumentException)! La seule chose que je peux penser est que vous n'utilisez pas Enterprise Library 5. Pourriez-vous utiliser EL 4.1? –