Как сделать так, чтобы столбцы non-null varchar были непустыми при проверке ASP.NET MVC? - PullRequest
1 голос
/ 13 февраля 2009

Поэтому я использую ASP.NET MVC RC1 и использую валидацию DefaultModelBinder, чтобы показать ошибки валидации, когда целочисленные поля, не равные NULL, не установлены в значение. Это сделано по умолчанию MVC. Однако то же самое не относится к строковым (varchar) полям, поскольку связывателю передается пустая строка из представления, что полностью допустимо для ненулевого столбца varchar.

Однако на практике, когда я отмечаю столбец как ненулевой, я почти всегда имею в виду, что я хочу, чтобы он был не пустым. Итак, я придумала способ добавления этой проверки в связыватель по умолчанию:

public class DefaultEntityBinder : DefaultModelBinder
{
    protected override bool OnPropertyValidating(ControllerContext controllerContext, ModelBindingContext bindingContext, System.ComponentModel.PropertyDescriptor propertyDescriptor, object value)
    {
        bool valid = base.OnPropertyValidating(controllerContext, bindingContext, propertyDescriptor, value);

        ColumnAttribute column = propertyDescriptor.Attributes.OfType<ColumnAttribute>().FirstOrDefault();
        if (column != null &&
            propertyDescriptor.PropertyType == typeof(string) &&
            !column.CanBeNull &&
            value.IsNullOrBlankString())
        {
            valid = false;
            bindingContext.ModelState[propertyDescriptor.Name].Errors.Add("A value is required");
        }
        return valid;
    }
}

Мне интересно, является ли это наиболее эффективным способом достижения цели добавления обязательной проверки строкового поля в проверку по умолчанию в MVC.

1 Ответ

1 голос
/ 13 февраля 2009

Я просмотрел привязку модели по умолчанию (в частности, TypeHelpers.TypeAllowsNullValue), и я не вижу в этом ничего лучшего. Вы можете реализовать IDataErrorInfo для типа, который содержит строку, но вам придется делать это для каждого поддерживаемого вами типа. Так что то, что вы делаете, хорошо. Если вы открыты для стороннего кода, стоит рассмотреть платформу проверки xVal . Затем вы можете использовать такие вещи, как атрибуты в System.ComponentModel, для украшения ненулевых строк.

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