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 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 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 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 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 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 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.