Атрибут DataType не работает - PullRequest
1 голос
/ 15 августа 2011

В веб-приложении ASP.NET MVC 3 у меня есть модель представления со свойствами, помеченными атрибутами DataType, но они не выполняют фактическую проверку на стороне клиента и на стороне сервера. Почему?

public class RegisterModel
{
    [Required(ErrorMessage = "Phone number is required")]
    [DataType(DataType.PhoneNumber)]
    [Display(Name = "Phone number")]
    public string PhoneNumber { get; set; }

    [Required(ErrorMessage = "E-mail address is required")]
    [DataType(DataType.EmailAddress, ErrorMessage = "Please enter a valid date (ex: 2/14/2011)")]
    [Display(Name = "E-mail address")]
    public string Email { get; set; }
}

Спасибо за ответ.

Ответы [ 4 ]

4 голосов
/ 15 августа 2011

Атрибуты DataType нельзя использовать для проверки ввода пользователя. Они предоставляют только подсказки для рендеринга значений с использованием шаблонных помощников.

Если для того, что вам нужно, нет встроенного атрибута проверки, например, Range или Required, вам нужно создать собственный атрибут проверки свойства и украсить свойство вашей модели таковым для проверки. Например, для DataType.EmailAddress

Это описано в Pro Asp.net mvc 3 Framework (Адам Фриман и Стив Сандерсон, стр. 618 или около того)

0 голосов
/ 18 марта 2018

Для .NET Framework 4.5 и выше есть атрибут проверки с именем [EmailAddress], используйте его для своего свойства, например

[Required]
[DataType(DataType.EmailAddress)]
[EmailAddress(ErrorMessageResourceName = "MustBeEmail", ErrorMessageResourceType = typeof(Resources))]
public string Email { get; set; }

Также не забудьте убедиться, что вы включили проверку на стороне клиента и ненавязчивы в web.config файле

<appSettings>
    <add key="ClientValidationEnabled" value="true"/>
    <add key="UnobtrusiveJavaScriptEnabled" value="true"/>
</appSettings>

и включенные js файлы в вашу бритву.

0 голосов
/ 20 апреля 2013

Я согласен с тем, что атрибут DataType не выполняет никаких проверок. Но у вас есть атрибут Required, который должен работать.

У вас должна быть форма для отображения элементов управления вашими свойствами. Когда форма будет опубликована, нажмите «Отправить».

Предположим, ваша форма размещена по методу ниже.

[HttpPost]
        public ActionResult SaveRegisterDetails(Register registerDetails)
        {
            if (ModelState.IsValid)
                return View();
            else
                return View("Index", registerDetails);
        }

Передайте ваш объект ViewModel в качестве параметра. Все значения, отправленные из формы, будут присутствовать в этом объекте. Затем проверьте ModelState, является ли он действительным или нет. Если он недействителен, верните то же представление, из которого была отправлена ​​форма, и передайте объект ViewModel в качестве параметра.

Если вы используете EditorForModel или DisplyForModel, то используйте помощник ValidationSummary для отображения сообщений об ошибках в пользовательском интерфейсе.

0 голосов
/ 15 августа 2011

Вы включили:

<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js")" type="text/javascript"></script>

в свою главную страницу?

Кроме того, они вам нужны в вашем Web.config:

<appSettings>
    <add key="ClientValidationEnabled" value="true"/>
    <add key="UnobtrusiveJavaScriptEnabled" value="true"/>
</appSettings>
...