Walidacja przy użyciu modułów walidacji adnotacji danych (VB)

przez Microsoft

Skorzystaj z spinacza modelu adnotacji danych do wykonywania sprawdzania poprawności w ASP.NET aplikacji MVC. Dowiedz się, jak używać różnych typów atrybutów walidatora i pracować z nimi w programie Microsoft Entity Framework.

W tym samouczku dowiesz się, jak używać sprawdzania poprawności adnotacji danych do sprawdzania poprawności w ASP.NET aplikacji MVC. Zaletą korzystania z sprawdzania poprawności adnotacji danych jest to, że umożliwiają one wykonywanie sprawdzania poprawności po prostu przez dodanie jednego lub więcej atrybutów — takich jak wymagany lub StringLength atrybut — do właściwości klasy.

Przed użyciem modułów sprawdzania poprawności adnotacji danych należy pobrać spinacz modelu adnotacji danych. Przykład spinacza modelu adnotacji danych można pobrać ze strony internetowej CodePlex, klikając tutaj.

Ważne jest, aby zrozumieć, że spinacz modelu adnotacji danych nie jest oficjalną częścią struktury MVC firmy Microsoft ASP.NET. Mimo że spinacz modelu adnotacji danych został utworzony przez zespół Microsoft ASP.NET MVC, firma Microsoft nie oferuje oficjalnej obsługi produktu dla spinacza modelu adnotacji danych opisanych i używanych w tym samouczku.

Korzystanie z spinacza modelu adnotacji danych

Aby użyć spinacza modelu adnotacji danych w ASP.NET aplikacji MVC, należy najpierw dodać odwołanie do zestawu Microsoft.Web.Mvc.DataAnnotations.dll i zestawu System.ComponentModel.DataAnnotations.dll. Wybierz opcję menu Projekt, Dodaj odwołanie. Następnie kliknij kartę Przeglądaj i przejdź do lokalizacji, w której pobrano (i rozpakowałeś) przykład spinacza modelu adnotacji danych (patrz rysunek 1).

Rysunek 1: Dodawanie odwołania do spinacza modelu adnotacji danych(Kliknij, aby wyświetlić pełnowymiarowy obraz)

Wybierz zarówno zestaw Microsoft.Web.Mvc.DataAnnotations.dll, jak i zestaw System.ComponentModel.DataAnnotations.dll i kliknij przycisk OK.

Nie można użyć zestawu System.ComponentModel.DataAnnotations.dll dołączonego do dodatku Service Pack 1 programu .NET Framework z spinaczem modelu adnotacji danych. Należy użyć wersji zestawu System.ComponentModel.DataAnnotations.dll dołączonego do przykładowego pobierania spinacza modelu adnotacji danych.

Na koniec należy zarejestrować DataAnnotations Model Binder w pliku Global.asax. Dodaj następujący wiersz kodu do_programu obsługi zdarzeń Application_Start(), aby metoda Application Start() wyglądała następująco:

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

Ten wiersz kodu rejestruje DataAnnotationsModelBinder jako domyślny spinacz modelu dla całej aplikacji MVC ASP.NET.

Korzystanie z atrybutów walidatora adnotacji danych

Korzystając z spinacza modelu adnotacji danych, do wykonywania sprawdzania poprawności używane są atrybuty walidatora. Obszar nazw System.ComponentModel.DataAnnotations zawiera następujące atrybuty walidatora:

  • Zakres — umożliwia sprawdzenie, czy wartość właściwości mieści się między określonym zakresem wartości.
  • RegularExpression — umożliwia sprawdzenie, czy wartość właściwości pasuje do określonego wzorca wyrażenia regularnego.
  • Wymagane — umożliwia oznaczenie właściwości zgodnie z wymaganiami.
  • StringLength — umożliwia określenie maksymalnej długości dla właściwości string.
  • Sprawdzanie poprawności — klasa podstawowa dla wszystkich atrybutów walidatora.

Note

Jeśli potrzeby sprawdzania poprawności nie są spełnione przez którykolwiek ze standardowych modułów sprawdzania poprawności, zawsze masz możliwość utworzenia atrybutu niestandardowego walidatora, dziedzicząc nowy atrybut walidatora z atrybutu sprawdzania poprawności podstawowej.

Product Klasy w aukcji 1 ilustruje, jak używać tych atrybutów walidatora. Name, Description i UnitPrice właściwości są oznaczone jako wymagane. Name Właściwość musi mieć długość ciągu, która jest mniejsza niż 10 znaków. Na koniec UnitPrice właściwość musi odpowiadać wzorzec wyrażenia regularnego, który reprezentuje kwotę waluty.

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

Lista 1: Modele\Product.vb

Product Klasa ilustruje sposób użycia jednego dodatkowego atrybutu: DisplayName atrybut. DisplayName atrybut umożliwia modyfikowanie nazwę właściwości, gdy właściwość jest wyświetlany w komunikacie o błędzie. Zamiast wyświetlania komunikatu o błędzie "Wymagane jest pole Cena jednostki", można wyświetlić komunikat o błędzie "Wymagane jest pole Cena".

Note

Jeśli chcesz całkowicie dostosować komunikat o błędzie wyświetlany przez walidatora, możesz przypisać niestandardowy komunikat o błędzie do właściwości ErrorMessage walidatora w ten sposób:<Required(ErrorMessage:="This field needs a value!")>

Klasy Produkt w wykazie 1 można użyć akcji Kontroler Create() w wykazie 2. Ta akcja kontrolera ponownie wyświetla Widok Utwórz, gdy stan modelu zawiera błędy.

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

Lista 2: Controllers\ProductController.vb

Na koniec można utworzyć widok w aukcji 3, klikając prawym przyciskiem myszy akcję Utwórz() i wybierając opcję menu Dodaj widok. Utwórz silnie typiwany widok z Product klasy jako klasy modelu. Wybierz pozycję Utwórz z listy rozwijanej zawartości widoku (patrz rysunek 2).

Rysunek 2: Dodawanie widoku tworzenia

<%@ 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>

Lista 3: Widoki\Produkt\Create.aspx

Note

Usuń pole Id z formularza Utwórz wygenerowanego przez opcję menu Dodaj widok. Ponieważ pole Identyfikator odpowiada kolumnie Tożsamość, nie chcesz zezwalać użytkownikom na wprowadzanie wartości tego pola.

Jeśli prześlesz formularz do utworzenia produktu i nie wprowadzisz wartości dla wymaganych pól, zostaną wyświetlone komunikaty o błędach sprawdzania poprawności na rysunku 3.

Rysunek 3: Brak wymaganych pól

Jeśli wprowadzisz nieprawidłową kwotę w walucie, zostanie wyświetlony komunikat o błędzie na rysunku 4.

Rysunek 4: Nieprawidłowa kwota w walucie

Korzystanie z walidatorów adnotacji danych z platformą encji

Jeśli używasz microsoft entity framework do generowania klas modelu danych, nie można zastosować atrybuty walidatora bezpośrednio do klas. Ponieważ Projektant struktury encji generuje klasy modelu, wszelkie zmiany wprowadzone w klasach modelu zostaną zastąpione przy następnym wpisaniu jakichkolwiek zmian w Projektancie.

Jeśli chcesz użyć modułów sprawdzania poprawności z klasami generowanymi przez entity framework, należy utworzyć klasy metadanych. Zastosuj moduły sprawdzania poprawności do klasy metederacji zamiast stosowania walidatorów do rzeczywistej klasy.

Załóżmy na przykład, że klasa Movie została utworzona przy użyciu struktury encji (patrz rysunek 5). Wyobraź sobie ponadto, że chcesz, aby właściwości Tytuł filmu i Reżyser wymagały właściwości. W takim przypadku można utworzyć klasę częściową i klasę metadane w aukcji 4.

Rysunek 5: Klasa filmu generowana przez 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

Lista 4: Modele\Movie.vb

Plik w aukcji 4 zawiera dwie klasy o nazwie Movie i MovieMetaData. Movie Klasa jest klasą częściową. Odpowiada klasy częściowej generowanej przez entity framework, która jest zawarta w pliku DataModel.Designer.vb.

Obecnie .NET framework nie obsługuje właściwości częściowych. W związku z tym nie ma możliwości zastosowania atrybutów walidatora do właściwości movie klasy zdefiniowane w pliku DataModel.Designer.vb, stosując atrybuty walidatora do właściwości Movie klasy zdefiniowane w pliku w aukcji 4.

Należy zauważyć, że Movie klasy częściowej jest ozdobiony MetadataType atrybut, który wskazuje na MovieMetaData klasy. Klasa MovieMetaData zawiera właściwości serwera proxy dla właściwości movie klasy.

Atrybuty walidatora są stosowane do właściwości moviemetadata klasy. Właściwości Title, Director i DateReased są oznaczone jako wymagane właściwości. Właściwość Director musi być przypisana ciąg, który zawiera mniej niż 5 znaków. Na koniec atrybut DisplayName jest stosowany do właściwości DateReleased, aby wyświetlić komunikat o błędzie, taki jak "Wymagane jest pole Data wydania". zamiast błędu "Wymagane jest pole DataWydajne".

Note

Należy zauważyć, że właściwości serwera proxy w MovieMetaData klasy nie muszą reprezentować te same typy jako odpowiednie właściwości w Movie klasy. Na przykład Właściwość Director jest właściwość string w Movie klasy i właściwość obiektu w MovieMetaData klasy.

Strona na rysunku 6 ilustruje komunikaty o błędach zwracane po wprowadzeniu nieprawidłowych wartości właściwości Movie.

Rysunek 6: Korzystanie z walidatorów z platformą encji(Kliknij, aby wyświetlić pełnowymiarowy obraz)

Podsumowanie

W tym samouczku dowiesz się, jak korzystać z spinacza modelu adnotacji danych do wykonywania sprawdzania poprawności w ASP.NET aplikacji MVC. Dowiedzialiście się, jak używać różnych typów atrybutów walidatora, takich jak wymagane i stringlength atrybuty. Podczas pracy z platformą Microsoft Entity Framework można również dowiedzieć się, jak używać tych atrybutów.