Část 6: Použití datových poznámek pro ověření modelu

podle Jon Galloway

MVC Music Store je výukové aplikace, která představuje a vysvětluje, jak používat ASP.NET MVC a Visual Studio pro vývoj pro web.

MVC Music Store je jednoduchá ukázková implementace obchodu, která prodává hudební alba online a implementuje základní správu webu, přihlašování uživatelů a funkce nákupního košíku.

Tato série kurzů podrobně popisuje všechny kroky potřebné k sestavení ukázkové aplikace ASP.NET MVC Music Store. Část 6 popisuje použití datových poznámek pro ověření modelu.

Máme velký problém s formuláři pro vytváření a úpravy: neprovádí žádné ověření. Můžeme třeba nechat požadovaná pole prázdná nebo zadat písmena do pole Cena a první chyba, kterou uvidíme, je z databáze.

Ověření můžeme do naší aplikace snadno přidat přidáním datových poznámek do tříd modelu. Datové poznámky nám umožňují popsat pravidla, která chceme použít u vlastností modelu, a ASP.NET MVC se postará o vynucování a zobrazování vhodných zpráv našim uživatelům.

Přidání ověření do formulářů alba

Použijeme následující atributy datových poznámek:

  • Povinné – Označuje, že vlastnost je povinné pole.
  • DisplayName – Definuje text, který se má použít v polích formuláře a ověřovacích zprávách.
  • StringLength – Definuje maximální délku pole řetězce.
  • Rozsah – Poskytuje maximální a minimální hodnotu číselného pole.
  • Vazba – Zobrazí seznam polí, která mají být vyloučena nebo zahrnuta při vazbě hodnot parametrů nebo formulářů s vlastnostmi modelu.
  • ScaffoldColumn – Umožňuje skrytí polí z formulářů editoru.

*Poznámka: Další informace o ověřování modelu pomocí atributů datových poznámek najdete v dokumentaci MSDN na adrese *https://go.microsoft.com/fwlink/?LinkId=159063

Otevřete třídu Album a přidejte následující příkazy using na začátek.

using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.Web.Mvc;

Dále aktualizujte vlastnosti a přidejte atributy zobrazení a ověření, jak je znázorněno níže.

namespace MvcMusicStore.Models
{
    [Bind(Exclude = "AlbumId")]
    public class Album
    {
        [ScaffoldColumn(false)]
        public int      AlbumId    { get; set; }
        [DisplayName("Genre")]
        public int      GenreId    { get; set; }
        [DisplayName("Artist")]
        public int      ArtistId   { get; set; }
        [Required(ErrorMessage = "An Album Title is required")]
        [StringLength(160)]
        public string   Title      { get; set; }
        [Range(0.01, 100.00,
            ErrorMessage = "Price must be between 0.01 and 100.00")]
        public decimal Price       { get; set; }
        [DisplayName("Album Art URL")]
        [StringLength(1024)]
        public string AlbumArtUrl { get; set; }
        public virtual Genre  Genre    { get; set; }
        public virtual Artist Artist   { get; set; }
    }
}

Zatímco jsme tam, změnili jsme také Žánr a Interpret na virtuální vlastnosti. Díky tomu může Entity Framework podle potřeby provádět opožděné načítání.

public virtual Genre    Genre       { get; set; }
public virtual Artist   Artist      { get; set; }

Po přidání těchto atributů do našeho modelu Album naše obrazovky pro vytváření a úpravy okamžitě začnou ověřovat pole a používat zobrazené názvy, které jsme zvolili (např. adresa URL obrázku alba místo AlbumArtUrl). Spusťte aplikaci a přejděte do /StoreManager/Create.

Snímek obrazovky s formulářem Vytvořit zobrazující rozevírací seznamy Žánr a Interpret a Pole Název, Cena a Album Art U R L

Dále přerušíme některá ověřovací pravidla. Zadejte cenu 0 a ponechte název prázdný. Když klikneme na tlačítko Vytvořit, zobrazí se formulář s chybovými zprávami ověření, která pole nesplňují ověřovací pravidla, která jsme definovali.

Snímek obrazovky formuláře Vytvořit ukazuje pole Název a Cena červeně kvůli chybám při zadávání, stejně jako doprovodnou červenou chybovou zprávu.

Testování ověřování na straně klienta

Ověření na straně serveru je z hlediska aplikace velmi důležité, protože uživatelé můžou obejít ověřování na straně klienta. Webové stránky však formuláře, které implementují pouze ověřování na straně serveru, vykazují tři významné problémy.

  1. Uživatel musí počkat na odeslání formuláře, ověření na serveru a odeslání odpovědi do prohlížeče.
  2. Uživatel nedostane okamžitou zpětnou vazbu, když opraví pole, aby nyní splňovalo ověřovací pravidla.
  3. Prostředky serveru používáme k provádění logiky ověřování místo využití prohlížeče uživatele.

Šablony generování ASP.NET MVC 3 naštěstí mají integrované ověřování na straně klienta, což nevyžaduje žádnou další práci.

Zadání jednoho písmena do pole Název splňuje požadavky na ověření, takže ověřovací zpráva se okamžitě odebere.

Snímek obrazovky formuláře „Vytvořit“ zobrazující pole Cena červeně kvůli chybě při zadávání a doprovodný červený text chyby.