0

Je rencontre des problèmes avec le JavaScript émis pour la validation côté client lors de l'utilisation des annotations de données sur un modèle. Voici un exemple d'un modèle qui fonctionne très bien avec deux champs obligatoires suivis du JavaScript qui est émis:ASP.NET MVC 2 RC - La validation côté client à l'aide des annotations de données échoue avec plusieurs attributs

public class LoginUserViewModel 
    { 
     [Required(ErrorMessage = "Email required")] 
     public string EmailAddress { get; set; } 

     [Required(ErrorMessage="Password required")] 
     public string Password { get; set; } 
    } 
} 

//<![CDATA[ 
if (!window.mvcClientValidationMetadata) { window.mvcClientValidationMetadata = []; } 
window.mvcClientValidationMetadata.push({"Fields":[{"FieldName":"EmailAddress","ReplaceValidationMessageContents":true,"ValidationMessageId":"form0_EmailAddress_validationMessage","ValidationRules":[{"ErrorMessage":"Email required","ValidationParameters":{},"ValidationType":"required"}]},{"FieldName":"Password","ReplaceValidationMessageContents":true,"ValidationMessageId":"form0_Password_validationMessage","ValidationRules":[{"ErrorMessage":"Password required","ValidationParameters":{},"ValidationType":"required"}]}],"FormId":"form0","ReplaceValidationSummary":false}); 
//]]> 

dès que je mets un autre attribut sur le champ EmailAddress, un attribut d'expression régulière, plus pas le JavaScript a toutes les règles émises. Notez dans le JavaScript ci-dessous il y a juste un tableau vide où les règles devraient être. Voici le changement et le script. Des idées?

public class LoginUserViewModel 
    { 
     [Required(ErrorMessage = "Email required")] 
     [RegularExpression(@"^[a-z0-9]+([-+\.]*[a-z0-9]+)*@[a-z0-9]+([-\.][a-z0-9]+)*{2,4}$", ErrorMessage = "Invalid email format")] 
     public string EmailAddress { get; set; } 

     [Required(ErrorMessage="Password required")] 
     public string Password { get; set; } 
    } 

//<![CDATA[ 
if (!window.mvcClientValidationMetadata) { window.mvcClientValidationMetadata = []; } 
window.mvcClientValidationMetadata.push({"Fields":[{"FieldName":"EmailAddress","ReplaceValidationMessageContents":true,"ValidationMessageId":"form0_EmailAddress_validationMessage","ValidationRules":[]},{"FieldName":"Password","ReplaceValidationMessageContents":true,"ValidationMessageId":"form0_Password_validationMessage","ValidationRules":[{"ErrorMessage":"Password is required.","ValidationParameters":{},"ValidationType":"required"}]}],"FormId":"form0","ReplaceValidationSummary":false}); 
//]]> 

Des idées sur les causes de la disparition des règles lors de l'ajout du nouvel attribut?

Merci!

Répondre

6

Après une enquête plus approfondie, le problème est que l'expression régulière est cassée, parce que vous avez spécifié deux quantificateurs back-to-back:

parsing "[a-z0-9]+([-+\.]*[a-z0-9]+)*@[a-z0-9]+([-\.][a-z0-9]+)*{2,4}" 
- Nested quantifier {. 

La raison pour laquelle toutes les règles semblent disparaître est parce que le CLR avale les exceptions des constructeurs d'attributs et vous dit simplement "désolé, il n'y a pas d'attributs ici".

Questions connexes