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.
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.
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.
- Użytkownik musi poczekać na opublikowanie formularza, zweryfikowanie go na serwerze i wysłanie odpowiedzi do przeglądarki.
- Użytkownik nie otrzymuje natychmiastowej opinii, gdy poprawi pole, tak aby teraz przechodził przez reguły sprawdzania poprawności.
- 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.