Проверка входных данных сервера / клиента для формы asp.net с использованием атрибута / dataannotation - PullRequest
1 голос
/ 04 августа 2010

Я играл с валидацией DataAnnotation asp.net mvc 2.Это очень хорошо подходит для проверки на стороне клиента.Мне действительно нравится, что я могу просто определить один набор правил и иметь возможность использовать его как на стороне клиента, так и на стороне сервера.

Мне интересно, возможно ли это сделать с помощью формы asp.net.В следующем фрагменте кода показано, как это делается, и он отлично работает для простой проверки данных на стороне сервера после создания объекта.

Однако я хотел бы повторно использовать проверки на стороне клиента (jQuery илибиблиотека javascript asp.net), поэтому мне не нужно определять 2 набора определения проверки на сервере / клиенте.

[DataMember, DisplayName("Prop A Description")]
[Required(ErrorMessage = "PropertyA is required.")]
[RegularExpression(@"^[0-9]*(\.)?[0-9]+$", ErrorMessage = "PropertyA format invalid")]
public string Property { get; set; }

, и я создал следующий метод в базовом классе для проверки

    public bool IsValid()
    {
        bool result = true;

        PropertyInfo[] properties = this.GetType().GetProperties();

        foreach (PropertyInfo property in properties)
        {

            //Get all the custom validation attributes
            var cusAttributes = property.GetCustomAttributes(typeof(ValidationAttribute), true).OfType<ValidationAttribute>();

            foreach (var attribute in cusAttributes)
            {
                //validate individual attribute base on it's custom attribute.
                Boolean isValid = attribute.IsValid(property.GetValue(this, null));

                //if attribute is not valid, log it to the ErrorMessage Collection
                if (!isValid)
                {
                    this.ErrorMessages.Add(new ErrorSummary() { ErrorMessage = attribute.ErrorMessage });
                    result = false;
                }
            }

        }
        return result;
    }
...