Sdílet prostřednictvím


Ověřování validátory datových poznámek (VB)

od Microsoftu

Využijte binder modelu datových poznámek k ověření v rámci aplikace ASP.NET MVC. Naučte se používat různé typy atributů validátoru a pracovat s nimi v Microsoft Entity Frameworku.

V tomto kurzu se naučíte používat validátory datových poznámek k ověření v aplikaci ASP.NET MVC. Výhodou použití validátorů datových poznámek je, že umožňují provést ověření jednoduše přidáním jednoho nebo více atributů – například Required nebo StringLength – do vlastnosti třídy.

Je důležité si uvědomit, že binder modelu datových poznámek není oficiální součástí architektury Microsoft ASP.NET MVC. Přestože binder modelu datových poznámek byl vytvořen týmem Microsoft ASP.NET MVC, Microsoft nenabízí oficiální podporu produktu pro pořadač modelu datových poznámek, který je popsaný a použitý v tomto kurzu.

Použití pořadače modelu datových poznámek

Chcete-li použít vazač modelu datových poznámek v aplikaci ASP.NET MVC, musíte nejprve přidat odkaz na sestavení Microsoft.Web.Mvc.DataAnnotations.dll a sestavení System.ComponentModel.DataAnnotations.dll. Vyberte možnost nabídky Projekt, Přidat odkaz. Potom klikněte na kartu Procházet a přejděte do umístění, kam jste stáhli (a rozbalili) ukázku pořadače modelu datových poznámek (viz obrázek 1).

Obrázek dialogového okna Přidat odkaz

Obrázek 1: Přidání odkazu na pořadač modelu datových poznámek (kliknutím zobrazíte obrázek v plné velikosti)

Vyberte sestavení Microsoft.Web.Mvc.DataAnnotations.dll i sestavení System.ComponentModel.DataAnnotations.dll a klikněte na tlačítko OK .

Nelze použít System.ComponentModel.DataAnnotations.dll sestavení, které je součástí .NET Framework Service Pack 1 s vazačem modelu datových poznámek. Musíte použít verzi System.ComponentModel.DataAnnotations.dll sestavení, která je součástí stažení ukázky pořadače modelu datových poznámek.

Nakonec je potřeba zaregistrovat binder modelu DataAnnotations v souboru Global.asax. Do obslužné rutiny události Application_Start() přidejte následující řádek kódu, aby metoda Application_Start() vypadala takto:

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

Tento řádek kódu registruje DataAnnotationsModelBinder jako výchozí pořadač modelu pro celou aplikaci ASP.NET MVC.

Použití atributů validátoru datových poznámek

Když použijete pořadač modelu datových poznámek, použijete k ověření atributy validátoru. Obor názvů System.ComponentModel.DataAnnotations obsahuje následující atributy validátoru:

  • Rozsah – umožňuje ověřit, jestli hodnota vlastnosti spadá mezi zadaný rozsah hodnot.
  • RegularExpression – umožňuje ověřit, jestli hodnota vlastnosti odpovídá zadanému vzoru regulárního výrazu.
  • Povinné – Umožňuje označit vlastnost jako povinnou.
  • StringLength – umožňuje zadat maximální délku vlastnosti řetězce.
  • Validation – základní třída pro všechny atributy validátoru.

Poznámka

Pokud některý ze standardních validátorů nesplní vaše potřeby ověření, máte vždy možnost vytvořit vlastní atribut validátoru tak, že zdědíte nový atribut validátoru ze základního atributu ověření.

Třída Product ve výpisu 1 ukazuje, jak tyto atributy validátoru používat. Vlastnosti Name, Description a UnitPrice jsou označené jako povinné. Vlastnost Name musí mít délku řetězce menší než 10 znaků. Nakonec UnitPrice vlastnost musí odpovídat vzoru regulárního výrazu, který představuje částku měny.

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

Výpis 1: Models\Product.vb

Třída Product ukazuje, jak použít jeden další atribut: atribut DisplayName. Atribut DisplayName umožňuje změnit název vlastnosti, když se vlastnost zobrazí v chybové zprávě. Místo zobrazení chybové zprávy "Pole UnitPrice je povinné" můžete zobrazit chybovou zprávu "Pole Cena je povinné".

Poznámka

Pokud chcete úplně přizpůsobit chybovou zprávu zobrazenou validátorem, můžete přiřadit vlastní chybovou zprávu k vlastnosti ErrorMessage validátoru takto: <Required(ErrorMessage:="This field needs a value!")>

Ve výpisu 1 můžete použít třídu Product s akcí kontroleru Create() (Vytvořit() ve výpisu 2. Tato akce kontroleru znovu zobrazí zobrazení Vytvořit, pokud stav modelu obsahuje nějaké chyby.

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

Výpis 2: Controllers\ProductController.vb

Nakonec můžete vytvořit zobrazení v seznamu 3 kliknutím pravým tlačítkem na akci Vytvořit() a výběrem možnosti nabídky Přidat zobrazení. Vytvořte zobrazení silného typu s třídou modelu Product. V rozevíracím seznamu obsahu zobrazení vyberte Vytvořit (viz obrázek 2).

Obrázek dialogového okna Přidat zobrazení

Obrázek 2: Přidání zobrazení pro vytvoření

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

Výpis 3: Views\Product\Create.aspx

Poznámka

Odeberte pole Id z možnosti nabídky Vytvořit formulář vygenerovaný příkazem Přidat zobrazení . Vzhledem k tomu, že pole Id odpovídá sloupci Identita, nechcete uživatelům povolit zadání hodnoty do tohoto pole.

Pokud odešlete formulář pro vytvoření produktu a nezadáte hodnoty požadovaných polí, zobrazí se na obrázku 3 chybové zprávy ověření.

Obrázek všech chybových zpráv ověřování

Obrázek 3: Chybějící požadovaná pole

Pokud zadáte neplatnou částku v měně, zobrazí se chybová zpráva na obrázku 4 .

Obrázek chybové zprávy o neplatné měně

Obrázek 4: Neplatná částka měny

Použití validátorů datových poznámek v Entity Frameworku

Pokud ke generování tříd datového modelu používáte Microsoft Entity Framework, nemůžete atributy validátoru použít přímo na vaše třídy. Vzhledem k tomu, že Designer Entity Framework generuje třídy modelu, všechny změny, které v třídách modelu provedete, se přepíší při příštím provedení jakýchkoli změn v Designer.

Pokud chcete použít validátory s třídami vygenerovanými rozhraním Entity Framework, musíte vytvořit třídy metadat. Místo použití validátorů na třídu metadat použijete validátory na skutečnou třídu.

Představte si například, že jste pomocí Entity Frameworku vytvořili třídu Movie (viz Obrázek 5). Představte si také, že chcete, aby vlastnosti Název filmu a Režie byly povinné. V takovém případě můžete vytvořit částečnou třídu a třídu metadat ve výpisu 4.

Obrázek třídy filmu

Obrázek 5: Třída filmů vygenerovaná rozhraním 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

Výpis 4: Models\Movie.vb

Soubor ve výpisu 4 obsahuje dvě třídy s názvem Movie a MovieMetaData. Třída Movie je částečná třída. Odpovídá částečné třídě vygenerované rozhraním Entity Framework, která je obsažena v modelu DataModel. Designer.vb.

Rozhraní .NET Framework v současné době nepodporuje částečné vlastnosti. Proto neexistuje způsob, jak použít validátor atributy na vlastnosti Třídy Movie definované v Modelu DataModel. Designer.vb použitím atributů validátoru na vlastnosti třídy Movie definované v souboru ve výpisu 4.

Všimněte si, že Movie částečná třída je zdobena MetadataType atribut, který odkazuje na MovieMetaData třídy. MovieMetaData Třída obsahuje vlastnosti proxy pro vlastnosti Movie třídy.

Validator atributy jsou použity na vlastnosti MovieMetaData třídy. Vlastnosti Title, Director a DateReleased jsou všechny označené jako povinné vlastnosti. Vlastnost Director musí mít přiřazený řetězec, který obsahuje méně než 5 znaků. Nakonec se u vlastnosti DateReleased použije atribut DisplayName, který zobrazí chybovou zprávu typu "Pole Datum vydání je povinné" místo chyby "Pole DateReleased je povinné".

Poznámka

Všimněte si, že vlastnosti proxy v MovieMetaData třídy nemusí představovat stejné typy jako odpovídající vlastnosti Movie třídy. Například Vlastnost Director je řetězcová vlastnost ve třídě Movie a vlastnost objektu ve třídě MovieMetaData.

Stránka na obrázku 6 znázorňuje chybové zprávy vrácené po zadání neplatných hodnot pro vlastnosti Video.

Obrázek chybové zprávy o neplatných hodnotách videa

Obrázek 6: Použití validátorů s Entity Frameworkem (kliknutím zobrazíte obrázek v plné velikosti)

Souhrn

V tomto kurzu jste zjistili, jak využít binder modelu datových poznámek k ověření v aplikaci ASP.NET MVC. Naučili jste se používat různé typy atributů validátoru, jako jsou atributy Required a StringLength. Také jste se naučili, jak tyto atributy používat při práci s Microsoft Entity Frameworkem.