Zpracování interakcí v metodách obslužné rutiny modelu PageModel

Dokončeno

V této jednotce si prohlédněte strukturu třídy stránky Razor Page a PageModel její komponenty. Dozvíte se, jak obslužné rutiny stránky interagují s naší stránkou Razor Page. Nakonec si projdete model a jeho datové poznámky, které řídí ověřování na straně klienta i Pizza serveru.

Prozkoumání struktury Razor Pages PageModel třídy

Nový soubor PageModel třídy obsahuje následující kód jazyka C#:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;

namespace RazorPagesPizza.Pages
{
    public class PizzaModel : PageModel
    {
        public void OnGet()
        {
        }
    }
}

Soubor třídy stránky Razor Definuje všechny obslužné rutiny stránky pro požadavky HTTP odeslané na stránku a PageModel data použitá k vykreslení stránky. Třída udržuje tyto obavy oddělené od stránky Razor Page, aplikace je modulární a PageModel snadněji se udržuje. Podle konvence má PageModel třída název [PageName]Model a nachází se ve stejném oboru názvů jako stránka Razor Page. V tomto případě se jedná o třídu PizzaModel v oboru názvů RazorPagesPizza.Pages.

V současné době PizzaModel třída zpracovává požadavek HTTP GET s prázdnou obslužnou OnGet rutinou stránky. Můžete přidat obslužné rutiny pro libovolný příkaz HTTP. Nejběžnější obslužné rutiny jsou:

  • OnGet pro inicializaci stavu potřebného pro stránku.
  • OnPost pro zpracování odesílání formulářů.

Stránka Pizza obsahuje formulář, a proto vyžaduje obslužnou rutinu stránky HTTP POST.

Obslužné rutiny stránky HTTP POST v PageModel

Obslužná OnPostAsync rutina stránky musí pro tuto aplikaci provést následující úlohy:

  • Ověří, že data odeslaná uživatelem a publikovaná ve třídě PageModel jsou platná.
  • Pokud jsou pokusy o změny neplatné, zobrazí se uživateli znovu stránka PageModel Pizza. Zobrazí se zpráva s vysvětlením požadavků na vstup.
  • Pokud je aktualizace PageModel platná, potom se změny dat předají službě s názvem PizzaService. PizzaServiceObjekt se bude potýká s trvalým uchováním dat.

Vytvoření vazby modelu

Třída PizzaModel potřebuje přístup k modelu Pizza. Ověří a předá Pizza položky z formuláře Pizza. Provede to pomocí atributu [BindProperty] v následujícím kódu:

[BindProperty]
public Pizza NewPizza { get; set; }

Vazba na vlastnosti může snížit množství kódu, který musíte napsat. Vazba zkracuje kód pomocí stejné vlastnosti pro vykreslení polí, jako například v <input asp-for="Pizza.Name">.

Integrované ověřování modelu na straně serveru s využitím datových poznámek ASP.NET Core

Vazby a ověření modelu jsou k dispozici při vytváření ASP.NET Core aplikace. K oběma událostem dochází automaticky před provedením obslužné rutiny stránky. Obslužná OnPostAsync rutina stránky tedy potřebuje pouze ověřit výsledek tohoto ověření.

if (!ModelState.IsValid)
{
    return Page();
}

ModelState v předchozím kódu představuje chyby z vytváření vazby a ověřování. Pokud je hodnota neplatná, zobrazí se uživateli stránka ModelState Pizza znovu. V předchozí jednotce jste viděli, jak stránka Pizza Razor ASP.NET Core integrované ověřování vstupu formuláře na straně klienta k rychlému poskytnutí zpětné vazby k ověření vstupu uživateli.

Pokud ModelState je platná, OnPostAsync obslužná rutina stránky volá instanci PizzaService . PizzaService zodpovídá za ukládání informací – v tomto případě pomocí úložiště dat v paměti.

Definování ověřovacích pravidel pro model Pizza pomocí datových poznámek

Tento projekt používá k ověřování a operacím modelu centrální soubor modelu Pizza.cs. Pizza Používají ji všechny modely PageModel stránky Razor zapojené do uživatelského rozhraní pro operace CRUD a slouží k ověření dat o pizzě přijatých Pizza z webového rozhraní API. Podle konvence se ukládá v adresáři Models. Obor Pizza názvů modelu je RazorPagesPizza.Models .

Vaše nová třída PizzaModel získala přístup ke všem typům modelů definovaným v oboru názvů RazorPagesPizza.Models, včetně modelu Pizza, s následující direktivou using:

using RazorPagesPizza.Models;

Prozkoumejte třídu modelu Pizza:

using System;
using System.ComponentModel.DataAnnotations;

namespace RazorPagesPizza.Models
{
    public class Pizza
    {
        public int Id { get; set; }

        [Required]
        public string Name { get; set; }
        public PizzaSize Size { get; set; }
        public bool IsGlutenFree { get; set; }

        [Range(0.01, 9999.99)]
        public decimal Price { get; set; }
    }

    public enum PizzaSize { Small, Medium, Large }
}

Datové poznámky jsou atributy, které určují chování, které chcete vynutit u vlastností modelu, u kterých jsou použity.

Třída Pizza používá:

  • [Required] atribut označující, že vlastnost musí mít hodnotu.
  • [Range] pro omezení hodnoty na konkrétní rozsah.

Pokud se rozhodnete vynucovat více ověřovacích pravidel, můžete snadno upravit atributy na jednom místě, v modelu Pizza, aniž byste museli upravovat jakékoli soubory třídy PageModel. To je velká výhoda!

V oboru názvů máte k dispozici komplexní sadu atributů datových System.ComponentModel.DataAnnotations poznámek. Pro rozsah tohoto modulu je k dispozici zjednodušený příklad.

Model Pizza jako objekt pro přenos dat

Model Pizza také slouží jako objekt pro přenos dat (DTO). DTO je objekt definující data, která se budou odesílat přes síť, v tomto případě do webového rozhraní API. V pokročilejší verzi této aplikace bude třída projektu RazorPagesPizza používat model jako objekt DTO definující platná data pizza, která je možné odeslat a získat z webového rozhraní API nebo PizzaService Pizza zálohovací databáze.

Dále aktualizujete interakci s třídou tak, aby vytvářely seznam existujících pizz a PizzaModel PizzaService vytvářely nové.

Kontrola znalostí

1.

Jakou metodu použijete ke zpracování odeslání formuláře v PageModel souboru ?