ASP.NET MVC 2 RC - проверка на стороне клиента с использованием аннотаций данных не выполняется с несколькими атрибутами - PullRequest
0 голосов
/ 05 января 2010

У меня проблемы с использованием JavaScript для проверки на стороне клиента при использовании аннотаций данных в модели. Вот пример модели, которая прекрасно работает с двумя обязательными полями, за которыми следует выдаваемый JavaScript:

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});
//]]> 

как только я поместил другой атрибут в поле EmailAddress, атрибут регулярного выражения, в JavaScript больше не было правил Обратите внимание, что в JavaScript ниже есть только пустой массив, где должны быть правила. Вот изменение и сценарий. Есть идеи?

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});
//]]> 

Есть идеи, что заставляет правила исчезать при добавлении нового атрибута?

Спасибо!

1 Ответ

6 голосов
/ 05 января 2010

После дальнейшего изучения проблема заключается в том, что ваше регулярное выражение не работает, потому что вы указали два квантификатора подряд:

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

Причина, по которой все правила, похоже, исчезают, заключается в том, что CLR проглатывает исключения из конструкторов атрибутов и просто говорит вам: «извините, здесь нет атрибутов».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...