Целочисленная проверка в asp.net mvc - PullRequest
1 голос
/ 07 мая 2009

Я использую проверку на стороне сервера, как

 public IEnumerable<RuleViolation> GetRuleViolations()
    {
        if (String.IsNullOrEmpty(Name))
            yield return new RuleViolation("Name is Required", "Name");
        if (Price == 0)
            yield return new RuleViolation("Price is Required", "Price");
        yield break;
    }

Когда я оставляю Price пустым, тогда значение принимает 0.

Поэтому я проверяю это с 0.

В моей базе данных цена не может быть нулевой; и я использую класс LINQ-to-SQL.

Теперь моя проблема в том, что когда я оставил Прайс-бланк пустым, он выдаст мне два сообщения, например.

  • Требуется значение.
  • Требуется цена.

Итак, как поставить пользовательскую проверку без отображения первого сообщения об ошибке?

Relpy для комментария Я передаю код книги Professional Asp.net MVC 1.0 здесь .

HTML-страницы Книги: Здесь .

полезно страница .

public class RuleViolation
    {
        public string ErrorMessage { get; private set; }
        public string PropertyName { get; private set; }

        public RuleViolation(string errorMessage)
        {
            ErrorMessage = errorMessage;
        }

        public RuleViolation(string errorMessage, string propertyName)
        {
            ErrorMessage= errorMessage;
            PropertyName = propertyName;
        }
    }

Ответы [ 3 ]

5 голосов
/ 07 мая 2009

Я думаю, что вы получаете первое сообщение «Требуется значение» автоматически из фреймворка, потому что ваше свойство Price является типом значения, которое никогда не может быть нулевым.

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

Если вы измените тип на nullable:

public double? Price { get; set; }

Это конкретное сообщение должно исчезнуть. Тогда вы можете изменить свою проверку на:

    if (Price == null)
        yield return new RuleViolation("Price is required", "Price");

Тот факт, что поле базы данных не допускает нулевые значения, не должен мешать вашим моделям представления.

2 голосов
/ 28 июля 2009

Чтобы сделать то, что Томас Эйде , написанный выше, работает (не вмешиваясь в код), вы можете ...

  1. Открыть соответствующий .dbml файл
  2. Нажмите «Цена»
  3. В окне свойств Visual Studio измените значение Nullable с False на True
  4. Сохраните файл!

Теперь вы можете пойти в свой класс и добавить оператор if, и VS не должен жаловаться.

1 голос
/ 08 мая 2009

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

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