откуда aspnet mvc modelState знает, как проверить правильность свойств? - PullRequest
1 голос
/ 07 мая 2011

У меня есть класс Сотрудник

public class Employee
{
  public string LastName { get; set; }
  public decimal Salary { get; set; }
}

В EmployeesController, метод

[HttpPostAttribute]
public ActionResult Create(Employee employee)
{

}

Если пользователь вводит «1,2,3» в поле «Зарплата» формы «Сотрудник», ModelState становится недействительным.

  1. «1,2,3» является действительным десятичным числом C #, но более важно
  2. почему / как / на каком основании Asp.Net MVC проверяет правильность введенной строки?

Я не нашел официальной документации по этому вопросу. Кто-нибудь может пролить свет на это?

1 Ответ

0 голосов
/ 07 мая 2011

введите описание ссылки здесь Так работает DecimalModelBinder (см. Второй ответ, в основном, механизм связывания десятичной модели возвращает false для 1, 2 и / или 3 ...).Это видеть 1, 2 и 3 только как целые числа.

Попробуйте ввести 1.00, и он возьмет его.

Это все о магии, это ModelBinders и здесь . Вот хороший обзор.

Вот пример как его расширить .

Еще один обзор с некоторыми советами по использованию преимуществпривязка модели.

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

РЕДАКТИРОВАТЬ - Чтобы ответить на ваши вопросы в комментариях ...

Вы можете изменить сообщение об ошибке, используя Аннотации данных .Проверьте это также.Вы также можете создавать свои собственные аннотации данных, если вам не нравится, как работают стандартные / встроенные.Вы также можете локализовать свои сообщения проверки .

Вот еще один хороший обзор , в котором рассматриваются некоторые методы, которые вы можете использовать для проверки.Вы можете добавить проверку непосредственно в модель, а также использовать аннотации.Особый интерес для вас может представлять проверка с использованием интерфейса IDataErrorInfo , интерфейса IValidatableObject и / или удаленной проверки .

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