ASP.NET MVC 2 Проверка числовых значений - PullRequest
0 голосов
/ 14 сентября 2010

У меня есть эта недвижимость в классе:

public virtual decimal? Number { get; set; }

Когда я использую его в форме, MVC проверяет его автоматически. Если пользователь вводит букву, естественно, возвращается ошибка:

"Значение 'D' недопустимо для числа."

Как мне изменить такое сообщение об ошибке или даже контролировать это поведение? Я не могу найти связанный атрибут или что-то в этом роде.

Спасибо!

Ответы [ 2 ]

0 голосов
/ 18 июня 2013

просто используйте указанный валидатор диапазона, и вы получите то, что вы хотите

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

Для целых чисел

[Range(0, int.MaxValue, ErrorMessage = "Please enter valid integer Number")]

для поплавка

[Range(0, float.MaxValue, ErrorMessage = "Please enter valid float Number")]

для двойного

[Range(0, double.MaxValue, ErrorMessage = "Please enter valid doubleNumber")]
0 голосов
/ 28 октября 2010

На самом деле это не сообщение, полученное в результате проверки модели. Сообщение добавляется в состояние модели, когда средство связывания модели не может преобразовать входное значение в тип значения связанного свойства. Это может произойти, например, когда свойство bound является целым числом, и пользователь ввел нецифровый символ в поле ввода этого свойства.

Чтобы переопределить сообщение, вам, к сожалению, придется сделать это «сложным» способом, то есть расширить класс DefaultModelBinder и переопределить метод SetProperty. Вот пример:

public class MyModelBinder: DefaultModelBinder
{
    public MyModelBinder()
    {
    }

    protected override void SetProperty(ControllerContext controllerContext, ModelBindingContext bindingContext, PropertyDescriptor propertyDescriptor, object value)
    {
        string key = bindingContext.ModelName + "." + propertyDescriptor.Name;
        if (bindingContext.ModelState[key] != null)
        {

            foreach (ModelError error in bindingContext.ModelState[key].Errors)
            {
                if (IsFormatException(error.Exception))
                {
                    bindingContext.ModelState[key].Errors.Remove(error);
                    bindingContext.ModelState[key].Errors.Add(string.Format("My message for {0}.", propertyDescriptor.DisplayName));
                    break;
                }
            }
        }
        base.SetProperty(controllerContext, bindingContext, propertyDescriptor, value);
    }

    private bool IsFormatException(Exception e)
    {
        while (e != null)
        {
            if (e is FormatException)
            {
                return true;
            }
            e = e.InnerException;
        }
        return false;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...