2013-08-01 4 views
0

Я использую asp.net MVC3, и я очень новичок в этой технологии.Ошибки привязки модели и ошибки проверки

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

Когда я перерисовываю свое редактирование, отображаются сообщения об ошибках проверки; однако значения, которые ранее вводил пользователь, исчезли из-за того, что модель должна содержать только старые данные.

Например, у меня был класс Person, а свойство Name не может быть пустой или пустой строкой, иначе оно выдает исключение проверки и предотвращает установку свойства. Теперь скажите, что пользователь удаляет значение из свойства Name и пытается сохранить Person из Интернета. Исключение проверки будет выбрано и обработано правильно, чтобы добавить ошибку в ModelState, чтобы она отображалась на экране; однако старое значение для Name отображается повторно, поскольку некорректная пустая строка никогда не попала в свойство.

Я не знаю, как решить эту проблему, и любые советы по этому вопросу будут очень признательны.

ответ

0

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

1

Моя рекомендация разрешает недействительные данные, но использует атрибуты проверки. Вы не сохраните недействительные объекты, так что проблем нет, и в наши дни это стандартный подход. Если вы не хотите этого делать, нет простого решения. Наиболее простым решением будет использование информации от Request.Form

+0

У меня был этот разговор много раз с моей командой. Я согласен с вами в предоставлении недействительных данных в моделях, но они этого не делают. Если бы мы реализовали ваш предлагаемый дизайн, то в других приложениях с помощью этих моделей было бы проще выполнить проверку. Несмотря на то, что этот дизайн обеспечивает большую работоспособность наших объектов-моделей, это вызывает проблемы, поскольку пользовательский интерфейс и базовая модель, с которой он связан, не синхронизированы. Итак, у нас есть 2 уровня проверки: проверка UI и проверка модели. Итак, мне нужно будет найти это «нелегкое» решение. – Frinavale

0

Вы должны реализовать IValidatableObject для выполнения такого рода проверки на стороне сервера.

IValidatableObject Interface Из MSDN:

Дает возможность объекту быть признаны недействительными.

Здесь приведен пример Using IValidatableObject Custom Validation, также из MSDN.

+0

Итак, мои модели имеют метод Validate, и я уже показываю ошибки проверки, обнаруженные на стороне сервера; однако отображается старое значение. Я добавил пример на мой вопрос, чтобы уточнить, что моя проблема ... Я не уверен, как интерфейс IValidatableObject поможет мне решить мою проблему ???? – Frinavale

+0

«Мои модели разработаны таким образом, что свойства будут выдавать ошибки проверки, если данные недействительны. В этом случае свойства не задаются с недопустимыми данными». Это проблема, новое значение никогда не будет установлено на модели, если его недействительно, то будет показано только старое значение! Вот почему вы должны внедрить проверку с помощью интерфейса – Fals

+0

Мне, должно быть, здесь что-то не хватает. Как вы сказали, IValidatableObject «Предоставляет возможность для объекта быть недействительным». и имеет 1 метод «Validate».Я прочитал приведенный вами пример (который демонстрирует, как выполнять выборочную проверку); однако, я все еще не вижу, как старые данные отображаются при использовании этого? Извините, но не могли бы вы объяснить это чуть больше? – Frinavale

Смежные вопросы