Проверка asp.net MVC 3 на тип данных - PullRequest
0 голосов
/ 20 мая 2011

Я пытаюсь реализовать валидацию по типу данных. Я использовал DataAnnotations, но для типа данных он не показывает настраиваемое сообщение

например, когда я пытаюсь ввести строковые данные в поле типа int. Как я могу настроить сообщения в этом случае?

Ответы [ 3 ]

4 голосов
/ 20 мая 2011

Если бы мне пришлось угадывать, вы звучите так, будто хотите, чтобы при проверке одного или нескольких полей в вашей модели отображалось пользовательское сообщение. Вы можете создать подкласс класса DataAnnotations.ValidationAttribute и переопределить метод IsValid(object) и, наконец, установить пользовательское значение ErrorMessage (где ErrorMessage уже принадлежит классу ValidationAttribute)

public class SuperDuperValidator : ValidationAttribute
{
    public override bool IsValid(object value)
    {
        bool valid = false;
        // do your validation logic here
        return valid;
    }
}

Наконец, украсьте свойство модели атрибутом

public class MyClass
{
    [SuperDuperValidator(ErrorMessage="Something is wrong with MyInt")]
    public int MyInt { get; set; }
}

Если вы используете готовый MVC3, это все, что вам нужно для правильной проверки модели (хотя ваша модель, вероятно, будет отличаться / иметь больше свойств и т. Д.) Итак, в вашем контроллере [HttpPost] действие, MVC автоматически свяжет MyClass, и вы сможете использовать ModelState.IsValid, чтобы определить, действительно ли опубликованные данные действительны.

2 голосов
/ 20 мая 2011

Павел,

Атрибут DataAnnotations DataType не влияет на проверку. Он используется, чтобы решить, как ваш вклад будет отображаться. В таком случае решение Дэвида выше работает.

Однако, если вы хотите использовать только встроенные атрибуты проверки, вам, вероятно, нужно использовать атрибут Range следующим образом:

[Range(0, 10, ErrorMessage="Please enter a number between 0 and 10")]
public int MyInt { get ; set ;}

(Конечно, вы действительно должны использовать параметры ErrorMessageResourceName / Type и извлекать жестко запрограммированные строки сообщений об ошибках в файлы resx.)

Обязательно сообщите MVC, где вывести сообщение об ошибке:

<%= Html.ValidationMessageFor(m => m.MyInt) %>

Или вы можете просто использовать EditorForModel, и он настроит его правильно.

0 голосов
/ 13 июня 2011

Не думаю, что на этот вопрос ответили, потому что у меня та же проблема.

Если у вас есть Модель со свойством типа int, а пользователь вводит строку «asd», то привязка / валидация инфраструктуры MVC3 включается, и в вашем представлении отображается "The value 'asd' is not valid for <model property name or DisplayName here>".

Мне постер спрашивает, можно ли настроить это сообщение о том, что выводит фреймворк MVC3? Я тоже хотел бы знать. Хотя сообщение не так уж плохо, если вы пометите свое поле чем-то, что легко указывает на ожидаемое число, вы все равно можете указать дополнительные причины, поэтому оно говорит что-то вроде:

"The value 'asd' is not valid for &lt;fieldname&gt;; must be a positive whole number."

Чтобы пользователь не вводил значение после значения и каждый раз получал разные сообщения об ошибках.

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