J'ai une classe .NET 2.0 dont les propriétés sont marqués virtual.I besoin d'utiliser la classe comme un modèle dans une application MVC2. J'ai donc créé une classe .NET 3.5 héritant de la classe .NET 2.0 et ajouté les attributs DataAnnotations aux propriétés redéfinies dans la nouvelle classe. Un extrait de ce que je l'ai fait est inférieurMVC2 validation des DataAnnotations avec l'héritage
// .NET 2.0 class
public class Customer
{
private string _firstName = "";
public virtual string FirstName
{
get { return _firstName; }
set { _firstName = value; }
}
}
// .NET 3.5 class
public class MVCCustomer : Customer
{
[Required(ErrorMessage="Firstname is required")]
public override string FirstName
{
get { return base.FirstName; }
set { base.FirstName = value; }
}
}
J'ai utilisé la classe comme modèle pour une vue MVC2 en utilisant les aides htmlFor. La validation Serverside fonctionne correctement mais pas la validation côté client. Plus précisément, l'erreur de validation n'est pas affichée sur la page.
Qu'est-ce que je manque, ou est-il possible de le faire en utilisant les classes de copain.
Merci.
EDIT 1: J'ai maintenant essayé avec des classes de validation de jumelage et cela ne fonctionne pas non plus.
EDIT 2: J'ai maintenant découvert que l'expression lambda fournie aux assistants HtmlFor est à l'origine du problème. Par exemple Html.TextBoxFor (m => m.Prénom) appelle la méthode ModelMetadata.FromLambdaExpression qui évalue le DeclaringType de MemberExpression (expression.Body) en tant que classe Customer et non en tant que classe MVCCustomer.
J'ai essayé de changer l'expression lambda en Html.TextBoxFor ((MVCCustomer m) => m.FirstName) mais le DeclaringType est toujours Client.
Y at-il une manière que je peux obtenir le DeclaringType être de type MVCCustomer et non client.
Avez-vous appelé EnableClientValidation? – SLaks
Oui, EnableClientValidation est appelée à partir de la page aspx. – bhiku