Provedení jednoduchého ověření (VB)
Naučte se provádět ověřování v aplikaci ASP.NET MVC. V tomto kurzu vás Stephen Walther seznámí se stavem modelu a pomocnými rutinami HTML pro ověřování.
Cílem tohoto kurzu je vysvětlit, jak můžete provádět ověřování v aplikaci ASP.NET MVC. Dozvíte se například, jak někomu zabránit v odeslání formuláře, který neobsahuje hodnotu požadovaného pole. Naučíte se používat stav modelu a ověřovací pomocné rutiny HTML.
Vysvětlení stavu modelu
K reprezentaci chyb ověřování se používá stav modelu , přesněji slovník stavů modelu. Například akce Vytvořit() ve výpisu 1 ověří vlastnosti třídy Product před přidáním třídy Product do databáze.
Nedoporučuji přidávat do kontroleru logiku ověřování nebo databáze. Kontroler by měl obsahovat pouze logiku související s řízením toku aplikace. Používáme zkratku, abychom to zjednodušily.
Výpis 1 – Controllers\ProductController.vb
'
' POST: /Product/Create
<AcceptVerbs(HttpVerbs.Post)> _
Public Function Create(<Bind(Exclude:="Id")> ByVal productToCreate As Product) As ActionResult
' Validation logic
If productToCreate.Name.Trim().Length = 0 Then
ModelState.AddModelError("Name", "Name is required.")
End If
If productToCreate.Description.Trim().Length = 0 Then
ModelState.AddModelError("Description", "Description is required.")
End If
If productToCreate.UnitsInStock
Ve výpisu 1 se ověřují vlastnosti Name, Description a UnitsInStock třídy Product. Pokud některá z těchto vlastností selže v ověřovacím testu, je do slovníku stavu modelu přidána chyba (reprezentovaná vlastností ModelState třídy Controller).
Pokud dojde k chybám ve stavu modelu, vrátí vlastnost ModelState.IsValid hodnotu false. V takovém případě se formulář HTML pro vytvoření nového produktu znovu zobrazí. V opačném případě se nový produkt přidá do databáze, pokud nedojde k žádným chybám ověření.
Použití pomocných rutin ověřování
Rozhraní ASP.NET MVC obsahuje dva pomocné rutiny ověřování: pomocník Html.ValidationMessage() a pomocník Html.ValidationSummary(). Tyto dva pomocné rutiny můžete použít v zobrazení k zobrazení chybových zpráv ověření.
Pomocné rutiny Html.ValidationMessage() a Html.ValidationSummary() se používají v zobrazeních Pro vytváření a úpravy, která se automaticky generují ASP.NET generováním MVC. Pokud chcete vygenerovat zobrazení Pro vytvoření, postupujte takto:
- V kontroleru Product klikněte pravým tlačítkem na akci Vytvořit() a vyberte možnost nabídky Přidat zobrazení (viz Obrázek 1).
- V dialogovém okně Přidat zobrazení zaškrtněte políčko Vytvořit zobrazení se silnými typy (viz obrázek 2).
- V rozevíracím seznamu Zobrazit datová třída vyberte třídu Product.
- V rozevíracím seznamu Zobrazit obsah vyberte Vytvořit.
- Klikněte na tlačítko Přidat .
Před přidáním zobrazení se ujistěte, že jste vytvořili aplikaci. V opačném případě se seznam tříd nezobrazí v rozevíracím seznamu Zobrazit datová třída .
Obrázek 01: Přidání zobrazení (kliknutím zobrazíte obrázek v plné velikosti)
Obrázek 02: Vytvoření zobrazení silného typu (kliknutím zobrazíte obrázek v plné velikosti)
Po dokončení těchto kroků získáte zobrazení Vytvořit ve výpisu 2.
Výpis 2 – Views\Product\Create.aspx
<%@ Page Title="" Language="VB" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage(Of MvcApplication1.Product)" %>
<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server">
<title>Create</title>
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<h2>Create</h2>
<%= Html.ValidationSummary() %>
<% 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="Price">Price:</label>
<%= Html.TextBox("Price") %>
<%= Html.ValidationMessage("Price", "*") %>
</p>
<p>
<label for="UnitsInStock">UnitsInStock:</label>
<%= Html.TextBox("UnitsInStock") %>
<%= Html.ValidationMessage("UnitsInStock", "*") %>
</p>
<p>
<input type="submit" value="Create" />
</p>
</fieldset>
<% End Using %>
<div>
<%=Html.ActionLink("Back to List", "Index") %>
</div>
</asp:Content>
Ve výpisu 2 je pomocná rutina Html.ValidationSummary() volána bezprostředně nad formulářem HTML. Tato pomocná rutina slouží k zobrazení seznamu chybových zpráv ověřování. Pomocník Html.ValidationSummary() vykreslí chyby v seznamu s odrážkami.
Pomocná rutina Html.ValidationMessage() je volána vedle každého pole formuláře HTML. Tato pomocná rutina slouží k zobrazení chybové zprávy přímo vedle pole formuláře. V případě výpisu 2 zobrazí pomocník Html.ValidationMessage() hvězdičku, když dojde k chybě.
Stránka na obrázku 3 znázorňuje chybové zprávy vykreslované pomocníky ověřování při odeslání formuláře s chybějícími poli a neplatnými hodnotami.
Obrázek 03: Zobrazení pro vytvoření odeslané s problémy (kliknutím zobrazíte obrázek v plné velikosti)
Všimněte si, že vzhled vstupních polí HTML se také změní, když dojde k chybě ověření. Pomocník Html.TextBox() vykresluje atribut class="input-validation-error" při chybě ověření přidružené vlastnosti vykreslované pomocníkem Html.TextBox().
K řízení výskytu chyb ověření se používají tři třídy šablon stylů CSS:
- input-validation-error – použito u <vstupní> značky vykreslené pomocným rutinou Html.TextBox().
- field-validation-error – použito u značky <span> vykreslené pomocnou rutinou Html.ValidationMessage().
- validation-summary-errors – použito u <značky ul> vykreslené pomocnou rutinou Html.ValidationSummary().
Tyto třídy šablon stylů CSS můžete upravit a tím změnit vzhled chyb ověření úpravou souboru Site.css umístěného ve složce Obsah.
Poznámka
Třída HtmlHelper obsahuje statické vlastnosti jen pro čtení pro načtení názvů ověřovací související třídy CSS. Tyto statické vlastnosti se nazývají ValidationInputCssClassName, ValidationFieldCssClassName a ValidationSummaryCssClassName.
Předběžná vazba na ověření a následné ověření vazby
Pokud odešlete formulář HTML pro vytvoření produktu a zadáte neplatnou hodnotu pole price a žádnou hodnotu pro pole UnitsInStock, zobrazí se ověřovací zprávy na obrázku 4. Odkud pocházejí tyto chybové zprávy ověřování?
Obrázek 04: Předběžné vazby při ověřování chyb (kliknutím zobrazíte obrázek v plné velikosti)
Ve skutečnosti existují dva typy chybových zpráv ověření – ty, které se vygenerují před tím, než jsou pole formuláře HTML svázaná s třídou, a ty vygenerované po polích formuláře jsou svázané s třídou. Jinými slovy, dochází k chybám ověřování předem a k chybám ověřování po vazbě.
Akce Create() vystavená kontrolerem Product ve výpisu 1 přijímá instanci třídy Product. Podpis metody Create vypadá takto:
Public Function Create(<Bind(Exclude:="Id")> ByVal productToCreate As Product) As ActionResult
Hodnoty polí formuláře HTML z formuláře Vytvořit jsou vázány na productToCreate třídy pomocí něčeho, co se nazývá pořadač modelu. Výchozí pořadač modelu přidá do stavu modelu chybovou zprávu automaticky, když nemůže svázat pole formuláře s vlastností formuláře.
Výchozí pořadač modelu nemůže svázat řetězec "apple" s vlastností Price třídy Product. Řetězec nelze přiřadit k desítkové vlastnosti. Proto pořadač modelů přidá do stavu modelu chybu.
Výchozí pořadač modelu také nemůže přiřadit hodnotu Nothing vlastnosti, která nepřijímá hodnotu Nothing. Konkrétně pořadač modelu nemůže přiřadit hodnotu Nothing unitsInStock vlastnost. Pořadač modelu opět upustí a do stavu modelu přidá chybovou zprávu.
Pokud chcete přizpůsobit vzhled těchto předběžných chybových zpráv, musíte pro tyto zprávy vytvořit řetězce prostředků.
Souhrn
Cílem tohoto kurzu bylo popsat základní mechanismus ověřování v architektuře ASP.NET MVC. Naučili jste se používat stav modelu a pomocné rutiny HTML pro ověřování. Probrali jsme také rozdíl mezi ověřováním předběžné vazby a ověřováním po vazbě. V dalších kurzech probereme různé strategie pro přesun ověřovacího kódu z kontrolerů do tříd modelu.