Udostępnij za pośrednictwem


Część 6. Używanie adnotacji do danych na potrzeby walidacji modelu

Autor: Jon Galloway

Sklep MVC Music Store to aplikacja samouczka, która wprowadza i wyjaśnia krok po kroku, jak używać ASP.NET MVC i Visual Studio na potrzeby tworzenia aplikacji internetowych.

MVC Music Store to uproszczona przykładowa implementacja sklepu, która sprzedaje albumy muzyczne online i implementuje podstawową administrację witryną, logowanie użytkowników i funkcjonalność koszyka zakupów.

W tej serii samouczków szczegółowo opisano wszystkie kroki, które zostały podjęte w celu utworzenia przykładowej aplikacji ASP.NET MVC Music Store. Część 6 obejmuje używanie adnotacji danych do walidacji modelu.

Mamy poważny problem z formularzami tworzenia i edytowania: nie przeprowadzają żadnej walidacji. Możemy wykonywać takie czynności, jak pozostawianie wymaganych pól pustych lub wpisywanie liter w polu Cena, a pierwszym błędem, który zobaczymy, jest z bazy danych.

Walidację można łatwo dodać do naszej aplikacji, dodając adnotacje danych do klas modeli. Adnotacje danych pozwalają nam opisać reguły, które chcemy zastosować do naszych właściwości modelu, a ASP.NET MVC zajmie się ich wymuszaniem i wyświetlaniem odpowiednich komunikatów dla użytkowników.

Dodawanie walidacji do formularzy albumów

Użyjemy następujących atrybutów adnotacji danych:

  • Required — wskazuje, że właściwość jest polem wymaganym
  • DisplayName — definiuje tekst do użycia w polach formularza i komunikatach walidacji
  • StringLength — definiuje maksymalną długość pola ciągu
  • Zakres — podaje wartość maksymalną i minimalną dla pola liczbowego
  • Bind — wyświetla pola do wykluczenia lub uwzględnienia w przypadku powiązania parametru lub wartości formularza z właściwościami modelu
  • ScaffoldColumn — umożliwia ukrywanie pól przed formularzami edytora

*Uwaga: Aby uzyskać więcej informacji na temat walidacji modelu przy użyciu atrybutów adnotacji danych, zobacz dokumentację MSDN pod adresem *https://go.microsoft.com/fwlink/?LinkId=159063

Otwórz klasę Album i dodaj następujące instrukcje using na początku.

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

Następnie zaktualizuj właściwości, aby dodać atrybuty wyświetlania i walidacji, jak pokazano poniżej.

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; }
    }
}

Chociaż jesteśmy tam, zmieniliśmy również gatunek i artystę na właściwości wirtualne. Dzięki temu program Entity Framework może ładować je z opóźnieniem w razie potrzeby.

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

Po dodaniu tych atrybutów do modelu albumu ekran Tworzenie i edycja natychmiast rozpoczyna walidację pól i przy użyciu wybranych nazw wyświetlanych (np. Adresu URL albumu zamiast AlbumArtUrl). Uruchom aplikację i przejdź do folderu /StoreManager/Create.

Zrzut ekranu przedstawiający listę rozwijaną Gatunek i Artysta oraz pola Tytuł, Cena i Album Art U R L.

Następnie przerwimy niektóre reguły sprawdzania poprawności. Wprowadź cenę 0 i pozostaw pole Tytuł puste. Po kliknięciu przycisku Utwórz zostanie wyświetlony formularz z komunikatami o błędach walidacji pokazującymi, które pola nie spełniają zdefiniowanych reguł weryfikacji.

Zrzut ekranu przedstawiający formularz Tworzenie przedstawiający pola Tytuł i Cena na czerwono z powodu błędów w danych wejściowych i towarzyszących czerwonemu błędowi.

Testowanie weryfikacji Client-Side

Walidacja po stronie serwera jest bardzo ważna z perspektywy aplikacji, ponieważ użytkownicy mogą obejść weryfikację po stronie klienta. Jednak formularze stron internetowych, które implementują tylko weryfikację po stronie serwera, wykazują trzy istotne problemy.

  1. Użytkownik musi poczekać na opublikowanie formularza, zweryfikowanie go na serwerze i wysłanie odpowiedzi do przeglądarki.
  2. Użytkownik nie otrzymuje natychmiastowej opinii, gdy poprawi pole, tak aby teraz przechodził przez reguły sprawdzania poprawności.
  3. Marnujemy zasoby serwera, aby wykonać logikę walidacji zamiast korzystać z przeglądarki użytkownika.

Na szczęście szablony szkieletów MVC 3 ASP.NET mają wbudowaną weryfikację po stronie klienta, co nie wymaga żadnej dodatkowej pracy.

Wpisanie pojedynczej litery w polu Tytuł spełnia wymagania dotyczące walidacji, więc komunikat weryfikacji jest natychmiast usuwany.

Zrzut ekranu przedstawiający formularz Tworzenie przedstawiający pole Cena na czerwono z powodu błędu w danych wejściowych i towarzyszącego czerwonemu tekstowi błędu.