Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
от Майкрософт
Воспользуйтесь преимуществами привязки модели заметок к данным для выполнения проверки в ASP.NET приложении MVC. Узнайте, как использовать различные типы атрибутов проверяющего элемента управления и работать с ними в Microsoft Entity Framework.
В этом руководстве описано, как использовать проверяющие элементы заметок к данным для выполнения проверки в приложении ASP.NET MVC. Преимущество использования проверяющих элементов управления заметками к данным заключается в том, что они позволяют выполнять проверку, просто добавляя один или несколько атрибутов, таких как Обязательный атрибут или StringLength, в свойство класса.
Важно понимать, что связыватель модели заметок к данным не является официальной частью платформы Microsoft ASP.NET MVC. Несмотря на то, что связыватель модели заметок к данным был создан командой Microsoft ASP.NET MVC, корпорация Майкрософт не предлагает официальную поддержку для привязки модели заметок к данным, описанной и используемой в этом руководстве.
Использование привязки модели заметок к данным
Чтобы использовать связыватель модели заметок к данным в приложении MVC ASP.NET, необходимо сначала добавить ссылку на сборку Microsoft.Web.Mvc.DataAnnotations.dll и сборку System.ComponentModel.DataAnnotations.dll. Выберите пункт меню Проект, Добавить ссылку. Затем перейдите на вкладку Обзор и перейдите к расположению, где вы загрузили (и распакуировали) пример привязки модели примечаний к данным (см . рис. 1).
Рис. 1. Добавление ссылки на связыватель модели заметок к данным (щелкните для просмотра полноразмерного изображения)
Выберите сборку Microsoft.Web.Mvc.DataAnnotations.dll и сборку System.ComponentModel.DataAnnotations.dll и нажмите кнопку ОК .
Сборку System.ComponentModel.DataAnnotations.dll, включенную в пакет обновления 1 (SP1) платформа .NET Framework, нельзя использовать в связыватель модели заметок к данным. Необходимо использовать версию сборки System.ComponentModel.DataAnnotations.dll, включенную в скачанный пример привязки модели примечаний к данным.
Наконец, необходимо зарегистрировать связыватель модели DataAnnotations в файле Global.asax. Добавьте следующую строку кода в обработчик событий Application_Start(), чтобы метод Application_Start() выглядел следующим образом:
Protected Sub Application_Start()
RegisterRoutes(RouteTable.Routes)
ModelBinders.Binders.DefaultBinder = New Microsoft.Web.Mvc.DataAnnotations.DataAnnotationsModelBinder()
End Sub
Эта строка кода регистрирует DataAnnotationsModelBinder в качестве связывателя модели по умолчанию для всего приложения MVC ASP.NET.
Использование атрибутов проверяющего элемента управления заметки данных
При использовании связывателя модели заметок к данным для выполнения проверки используются атрибуты проверяющего элемента управления. Пространство имен System.ComponentModel.DataAnnotations включает следующие атрибуты проверяющего элемента управления:
- Диапазон — позволяет проверить, попадает ли значение свойства в указанный диапазон значений.
- RegularExpression — позволяет проверить, соответствует ли значение свойства указанному шаблону регулярного выражения.
- Обязательный — позволяет пометить свойство как обязательное.
- StringLength — позволяет указать максимальную длину строкового свойства.
- Validation — базовый класс для всех атрибутов проверяющего элемента управления.
Примечание
Если ваши требования к проверке не удовлетворяются ни одной из стандартных проверяющих элементов управления, вы всегда можете создать настраиваемый атрибут проверяющего элемента управления путем наследования нового атрибута проверяющего элемента от базового атрибута Validation.
Класс Product в листинге 1 иллюстрирует, как использовать эти атрибуты проверяющего элемента управления. Свойства Name, Description и UnitPrice помечаются как обязательные. Свойство Name должно иметь строку длиной менее 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. Models\Product.vb
Класс Product иллюстрирует использование одного дополнительного атрибута: атрибута DisplayName. Атрибут DisplayName позволяет изменять имя свойства, когда свойство отображается в сообщении об ошибке. Вместо сообщения об ошибке "Требуется поле UnitPrice", можно отобразить сообщение об ошибке "Требуется поле цены".
Примечание
Если вы хотите полностью настроить сообщение об ошибке, отображаемое проверятелем, можно назначить пользовательское сообщение об ошибке свойству ErrorMessage проверяющего элемента управления следующим образом: <Required(ErrorMessage:="This field needs a value!")>
Вы можете использовать класс Product в листинге 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. Controllers\ProductController.vb
Наконец, вы можете создать представление в листинге 3 , щелкнув правой кнопкой мыши действие Create() и выбрав пункт меню Добавить представление. Создайте строго типизированное представление с классом Product в качестве класса модели. Выберите Создать в раскрывающемся списке содержимого представления (см . рис. 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: Views\Product\Create.aspx
Примечание
Удалите поле Id из формы Создать, созданной с помощью пункта меню Добавить представление . Так как поле Id соответствует столбцу Идентификатор, вы не хотите разрешать пользователям вводить значение для этого поля.
Если отправить форму для создания продукта и не ввести значения для обязательных полей, отображаются сообщения об ошибках проверки на рисунке 3 .
Рис. 3. Отсутствуют обязательные поля
Если ввести недопустимую сумму в валюте, появится сообщение об ошибке на рис. 4 .
Рис. 4. Недопустимая сумма в валюте
Использование проверяющих элементов управления заметками данных с Entity Framework
Если вы используете Microsoft Entity Framework для создания классов модели данных, атрибуты проверяющего элемента управления нельзя применять непосредственно к классам. Так как Designer Entity Framework создает классы модели, любые изменения, внесенные в классы моделей, будут перезаписаны при следующем внесении изменений в Designer.
Если вы хотите использовать проверяющие элементы управления с классами, созданными Entity Framework, необходимо создать классы метаданных данных. Проверяющие элементы применяются к классу метаданных, а не к фактическому классу.
Например, представьте, что вы создали класс Movie с помощью Entity Framework (см . рис. 5). Кроме того, представьте, что вы хотите сделать свойства Movie Title и Director обязательными свойствами. В этом случае можно создать разделяемый класс и класс метаданных в листинге 4.
Рис. 5. Класс Movie, созданный Entity Framework
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: Models\Movie.vb
Файл в листинге 4 содержит два класса с именами Movie и MovieMetaData. Класс Movie является разделяемым классом. Он соответствует разделяемому классу, созданному Entity Framework, который содержится в DataModel. файл Designer.vb.
В настоящее время платформа .NET Framework не поддерживает частичные свойства. Таким образом, невозможно применить атрибуты проверяющего элемента к свойствам класса Movie, определенного в DataModel. Designer.vb, применив атрибуты проверяющего элемента к свойствам класса Movie, определенного в файле в листинге 4.
Обратите внимание, что разделяемый класс Movie дополнен атрибутом MetadataType, указывающим на класс MovieMetaData. Класс MovieMetaData содержит свойства прокси-сервера для свойств класса Movie.
Атрибуты проверяющего элемента управления применяются к свойствам класса MovieMetaData. Свойства Title, Director и DateReleased помечаются как обязательные. Свойству Director должна быть назначена строка, содержащая менее 5 символов. Наконец, атрибут DisplayName применяется к свойству DateReleased для отображения сообщения об ошибке, например "Требуется поле даты освобождения". Вместо ошибки "Поле DateReleased является обязательным".
Примечание
Обратите внимание, что свойства прокси-сервера в классе MovieMetaData не должны представлять те же типы, что и соответствующие свойства в классе Movie. Например, свойство Director — это строковое свойство в классе Movie и свойство объекта в классе MovieMetaData.
На странице на рис. 6 показаны сообщения об ошибках, возвращаемые при вводе недопустимых значений для свойств Movie.
Рис. 6. Использование проверяющих элементов с Entity Framework (щелкните для просмотра полноразмерного изображения)
Итоги
В этом руководстве вы узнали, как воспользоваться преимуществами привязки модели заметок к данным для выполнения проверки в ASP.NET приложении MVC. Вы узнали, как использовать различные типы атрибутов проверяющего элемента управления, такие как обязательные атрибуты и атрибуты StringLength. Вы также узнали, как использовать эти атрибуты при работе с Microsoft Entity Framework.