Проверка с помощью проверяющих элементов управления заметок к данным (VB)

корпорацией Майкрософт

Воспользуйтесь преимуществами модели аннотации данных Binder для выполнения проверки в ASP.NET mVC-приложении. Узнайте, как использовать различные типы атрибутов валидатора и работать с ними в рамочной системе сущности Майкрософт.

В этом уроке вы узнаете, как использовать валидаторы аннотации данных для выполнения проверки в ASP.NET mVC-приложении. Преимущество использования валидаторов аннотации данных заключается в том, что они позволяют выполнять проверку, просто добавляя один или несколько атрибутов, таких как атрибут «Требуемый» или «Струнный длина», в свойство класса.

Прежде чем использовать валидаторы аннотации данных, необходимо загрузить модель "Биндер" по каннотам данных. Вы можете скачать данные Аннотации Модель Binder Образец с веб-сайта CodePlex, нажав здесь.

Важно понимать, что модель наятивов данных Binder не является официальной частью платформы Microsoft ASP.NET MVC. Хотя модель наятирований данных Была создана командой Microsoft ASP.NET MVC, корпорация Майкрософт не предлагает официальную поддержку продуктов для модели данных Binder, описанной и используемой в этом уроке.

Использование связующего модели аннотации данных

Для того, чтобы использовать модельный разбойники данных в ASP.NET mVC-приложении, сначала необходимо добавить ссылку на сборку Microsoft.Web.Mvc.DataAnnotations.dll и сборку System.ComponentModel.DataAnnotations.dll. Выберите вариант меню Project, добавьте справку. Далее нажмите на вкладку «Обзор» и просмотрите место, где вы скачали (и расстегнули) образец модели Binder (см. рисунок 1).

Рисунок 1: Добавление ссылки на данные Аннотации модель Биндер (Нажмите, чтобы просмотреть полноразмерное изображение)

Выберите сборку Microsoft.Web.Mvc.DataAnnotations.dll и System.ComponentModel.DataAnnotations.dll сборки и нажмите кнопку OK.

Вы не можете использовать сборку System.ComponentModel.DataAnnotations.dll, включенную в пакет рамочной службы .NET 1 с моделью Binder. Вы должны использовать версию Сборки System.ComponentModel.DataAnnotations.dll, включенную в загрузку модели модели Binder.

Наконец, необходимо зарегистрировать модель DataAnnotations Binder в файле Global.asax. Добавьте следующую строку_кода в обработчик события_Application Start() так, чтобы метод «Старт приложения») выглядел следующим образом:

Protected Sub Application_Start()
    RegisterRoutes(RouteTable.Routes)
    ModelBinders.Binders.DefaultBinder = New Microsoft.Web.Mvc.DataAnnotations.DataAnnotationsModelBinder()
End Sub

Эта строка кода регистрирует DataAnnotationsModelBinder в качестве связующего по умолчанию для всего приложения MVC ASP.NET.

Использование атрибутов валидатора аннотации данных

При использовании модели обновилий данных Inder вы используете атрибуты валидатора для выполнения проверки. В пространстве имен System.ComponentModel.DataAnnotations включены следующие атрибуты валидатора:

  • Диапазон - Позволяет проверить, падает ли значение свойства между определенным диапазоном значений.
  • RegularExpression - Позволяет проверить, соответствует ли значение свойства определенному шаблону регулярного выражения.
  • Требуется - Позволяет пометить свойство по мере необходимости.
  • StringLength - Позволяет указать максимальную длину для свойства строки.
  • Проверка — базовый класс для всех атрибутов валидатора.

Note

Если ваши потребности в проверке не удовлетворяются ни одним из стандартных валидаторов, то у вас всегда есть возможность создания пользовательского атрибута валидатора, нанаследовав новый атрибут валидатора из базового атрибута валидации.

Класс продукта в листинге 1 иллюстрирует, как использовать эти атрибуты валидатора. Свойства имени, описания и UnitPrice помечены по мере необходимости. Свойство имени должно иметь длину строки менее 10 символов. Наконец, свойство UnitPrice должно соответствовать шаблону регулярного выражения, представляющего сумму в валюте.

Imports System.ComponentModel
Imports System.ComponentModel.DataAnnotations

Public Class Product

    Private _id As Integer
    Private _name As String
    Private _description As String
    Private _unitPrice As Decimal

    Public Property Id() As Integer
        Get
            Return _id
        End Get
        Set(ByVal value As Integer)
            _id = value
        End Set
    End Property

     _
    Public Property Name() As String
        Get
            Return _name
        End Get
        Set(ByVal value As String)
            _name = value
        End Set
    End Property

     _
    Public Property Description() As String
        Get
            Return _description
        End Get
        Set(ByVal value As String)
            _description = value
        End Set
    End Property

     _
    Public Property UnitPrice() As Decimal
        Get
            Return _unitPrice
        End Get
        Set(ByVal value As Decimal)
            _unitPrice = value
        End Set
    End Property

End Class

Листинг 1: Модели»Product.vb

Класс продукта иллюстрирует, как использовать один дополнительный атрибут: атрибут DisplayName. Атрибут DisplayName позволяет изменять имя свойства при отображении свойства в сообщении об ошибке. Вместо отображения сообщения об ошибке "Требуется поле UnitPrice" можно отобразить сообщение об ошибке "Требуется поле цены".

Note

Если вы хотите полностью настроить сообщение об ошибке, отображаемое валидатором, то вы можете назначить пользовательское сообщение об ошибке свойству ErrorMessage валидатора следующим образом:<Required(ErrorMessage:="This field needs a value!")>

Вы можете использовать класс продукта в листинге 1 с действием контроллера Create() в листинге 2. Это действие контроллера отображает представление «Создание», когда состояние модели содержит ошибки.

Public Class ProductController
    Inherits System.Web.Mvc.Controller

    '
    ' GET: /Product/Create

    Function Create() As ActionResult
        Return View()
    End Function

    '
    ' POST: /Product/Create

     _
    Function Create( ByVal productToCreate As Product) As ActionResult

        If Not ModelState.IsValid Then
            Return View()
        End If

        Return RedirectToAction("Index")

    End Function

End Class

Список 2: Контролеры/ProductController.vb

Наконец, вы можете создать представление в листинге 3, нажав на действие Create() и выбрав вариант меню Добавить вид. Создайте сильно типифицированный вид с классом продукта в качестве класса модели. Выберите Создать из списка выпадающих просмотров содержимого (см. рисунок 2).

Рисунок 2: Добавление представления создания

<%@ Page Title="" Language="VB" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage(Of MvcApplication1.Product)" %>

<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
Create
</asp:Content>

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">

    <h2>Create</h2>

    <%= Html.ValidationSummary("Create was unsuccessful. Please correct the errors and try again.") %>

    <% Using Html.BeginForm()%>

        <fieldset>
            <legend>Fields</legend>
            <p>
                <label for="Name">Name:</label>
                <%= Html.TextBox("Name") %>
                <%= Html.ValidationMessage("Name", "*") %>
            </p>
            <p>
                <label for="Description">Description:</label>
                <%= Html.TextBox("Description") %>
                <%= Html.ValidationMessage("Description", "*") %>
            </p>
            <p>
                <label for="UnitPrice">UnitPrice:</label>
                <%= Html.TextBox("UnitPrice") %>
                <%= Html.ValidationMessage("UnitPrice", "*") %>
            </p>
            <p>
                <input type="submit" value="Create" />
            </p>
        </fieldset>

    <% End Using %>

    <div>
        <%=Html.ActionLink("Back to List", "Index") %>
    </div>

</asp:Content>

Список 3: Просмотры »Продукт»Создать.aspx

Note

Удалите поле Id из формы «Создание», генерируемой опцией меню Add View. Поскольку поле Id соответствует столбцу identity, вы не хотите, чтобы пользователи могли вводить значение для этого поля.

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

Рисунок 3: Отсутствующие необходимые поля

Если вы вводите недействительную сумму валюты, отображается сообщение об ошибке на рисунке 4.

Рисунок 4: Недействительная сумма валюты

Использование валидаторов аннотации данных с рамочной системой entity

Если вы используете рамочную программу Microsoft Entity для генерации классов моделей данных, то вы не можете применять атрибуты валидатора непосредственно к классам. Поскольку проектировщик сущности создает классы моделей, любые изменения, внесенные в классы моделей, будут перезаписаны при следующем внесении изменений в проект.»

Если вы хотите использовать валидаторы с классами, генерируемыми Рамочной системой сущности, то необходимо создать классы мета-данных. Валидаторы применяются к классу мета данных вместо того, чтобы применять валидаторы к реальному классу.

Например, представьте, что вы создали класс Movie с помощью рамочной системы entity (см. рисунок 5). Представьте себе, кроме того, что вы хотите сделать название фильма и директор свойства необходимых свойств. В этом случае можно создать частичный класс и класс мета данных в листинге 4.

Рисунок 5: Класс фильма, сгенерированный Рамочной системой entity

Imports System.ComponentModel
Imports System.ComponentModel.DataAnnotations

 _
Partial Public Class Movie
End Class

Public Class MovieMetaData

    Private _title As Object
    Private _director As Object
    Private _dateReleased As Object

     _
    Public Property Title() As Object
        Get
            Return _title
        End Get
        Set(ByVal value As Object)
            _title = value
        End Set
    End Property

     _
    Public Property Director() As Object
        Get
            Return _director
        End Get
        Set(ByVal value As Object)
            _director = value
        End Set
    End Property

     _
    Public Property DateReleased() As Object
        Get
            Return _dateReleased
        End Get
        Set(ByVal value As Object)
            _dateReleased = value
        End Set
    End Property
End Class

Список 4: Модели»Movie.vb

Файл в листинге 4 содержит два класса под названием Movie и MovieMetaData. Класс Фильма является частичным классом. Он соответствует частичному классу, генерируемому Рамочной системой сущности, которая содержится в файле DataModel.Designer.vb.

В настоящее время фреймворк .NET не поддерживает частичные свойства. Таким образом, нет возможности применить атрибуты валидатора к свойствам класса Movie, определенным в файле DataModel.Designer.vb, применяя атрибуты валидатора к свойствам класса Movie, определенным в файле в листинге 4.

Обратите внимание, что частичное класс Movie украшен атрибутом MetadataType, который указывает на класс MovieMetaData. Класс MovieMetaData содержит прокси-свойства для свойств класса Movie.

Атрибуты валидатора применяются к свойствам класса MovieMetaData. Свойства Title, Director и DateReleased помечены как требуемые свойства. Свойство Директора должно быть присвоено строке, содержащей менее 5 символов. Наконец, атрибут DisplayName применяется к свойству DateReleased для отображения сообщения об ошибке, например" Требуется поле Типа Наиболее выпущенного поля. вместо ошибки "Требуется поле DateReleased".

Note

Обратите внимание, что свойства прокси в классе MovieMetaData не должны представлять те же типы, что и соответствующие свойства в классе Movie. Например, свойство директора является свойством строки в классе Movie и свойством объекта в классе MovieMetaData.

Страница на рисунке 6 иллюстрирует сообщения об ошибках, возвращенные при вводе недействительных значений для свойств Movie.

Рисунок 6: Использование валидаторов с рамкой entity(Нажмите, чтобы просмотреть полноразмерное изображение)

Сводка

В этом уроке вы узнали, как воспользоваться моделью индикации данных Binder для выполнения проверки в ASP.NET mVC-приложении. Вы узнали, как использовать различные типы атрибутов валидатора, такие как атрибуты Требуемого и Струнного Длины. Вы также узнали, как использовать эти атрибуты при работе с рамочной системой сущности Майкрософт.