PageModel işleyici yöntemlerinde etkileşimleri işleme

Tamamlandı

Bu birimde, Razor sayfa sınıfının ve bileşenlerinin yapısını gözden geçireceğiz PageModel . Sayfa işleyicilerinin Razor sayfamızda nasıl etkileşime gireceğini öğreneceksiniz. Son olarak, Pizza hem istemci tarafı hem de sunucu tarafı doğrulamayı destekleyen model ve onun veri açıklamalarını adım adım ilerleyebilirsiniz.

Razor Pages sınıfının yapısını İnceleme PageModel

Yeni bir PageModel sınıf dosyası aşağıdaki C# kodunu içerir:

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()
        {
        }
    }
}

Razor sayfasının PageModel sınıf dosyası, sayfaya GÖNDERILEN http istekleri ve sayfayı işlemek için kullanılan veriler için herhangi bir sayfa işleyicisini tanımlar. PageModelBu konuları Razor sayfasından, uygulamanızın daha modüler olmasını ve bakımının daha kolay kalmasını sağlar. Kuralına göre, PageModel sınıfı [PageName] modeli olarak adlandırılır ve Razor sayfasıyla aynı ad alanında yer alır. Bu durumda, RazorPagesPizza.Pages ad alanının PizzaModel sınıfındadır.

Şu anda, PizzaModel sınıfı boş bir sayfa IŞLEYICISIYLE http get isteğini işler OnGet . Her türlü HTTP fiili için işleyiciler ekleyebilirsiniz. En yaygın işleyiciler şunlardır:

  • Sayfa için gereken durumu başlatmak için OnGet.
  • Form gönderilerini işlemek için OnPost.

Pizza sayfası bir form içerir ve bu nedenle BIR http post sayfa işleyicisi gerektirir.

İçindeki HTTP POST sayfa işleyicileri PageModel

OnPostAsyncSayfa işleyicisinin bu uygulama için aşağıdaki görevleri gerçekleştirmesi gerekir:

  • PageModel öğesine kullanıcı tarafından gönderilen verileri doğrulayın.
  • Denenen PageModel değişiklikler geçersizse, pizza sayfası kullanıcıya yeniden sunulur. Giriş gereksinimlerini açıklığa kavuşturan bir ileti görüntülenir.
  • PageModel güncelleştirmesi geçerliyse, veri değişiklikleri PizzaService adlı bir hizmete geçirilir. , PizzaService Verileri kalıcı hale getiren sorunu işleymeyecektir.

Modeli bağlama

PizzaModel sınıfının Pizza modeline erişmesi gerekir. Bu işlem, Pizza pizza formundaki girişleri doğrular ve geçer. Bunu aşağıdaki kodda [BindProperty] özniteliğini kullanarak yapar:

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

Özelliklere bağlamak, yazmanız gereken kod miktarını azaltabilir. Bağlama, <input asp-for="Pizza.Name"> içindeki gibi alanları işlemek için aynı özelliği kullanarak kodu azaltır.

ASP.NET Core veri açıklamalarını kullanan yerleşik sunucu tarafı model doğrulaması

Model bağlama ve doğrulama, bir ASP.NET Core web uygulaması oluşturduğunuzda kullanılabilir. Her ikisi de sayfa işleyicisinin yürütmeden önce otomatik olarak gerçekleşir. Bu nedenle OnPostAsync sayfa işleyicisinin yalnızca doğrulamanın sonucunu doğrulaması gerekir.

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

Önceki kodda, ModelState model bağlama ve doğrulama hatalarını temsil eder. Geçersiz ise ModelState , pizza sayfası kullanıcıya yeniden sunulur. önceki birimde, pizza Razor sayfasının ASP.NET Core yerleşik istemci tarafı formu giriş doğrulamasını nasıl kullandığını gördünüz ve bu kullanıcıya giriş doğrulama geri bildirimi ile boyutlandırılabilir sağlayabilirsiniz.

Geçerliyse, ModelState OnPostAsync sayfa işleyicisi bir örneği üzerine çağrılır PizzaService . PizzaService Bu durumda, bellek içi veri deposu kullanılarak bilgilerin depolanmasından sorumludur.

Veri ek açıklamalarını kullanarak pizza modeli için doğrulama kuralları tanımlama

Bu proje model doğrulama ve işlemler için bir merkezi model dosyası pizza. cs kullanır Pizza . Bu, CRUD işlemlerine yönelik Kullanıcı arabirimine dahil olan tüm Razor sayfası Pizza ve Web API 'Sinden alınan pizza verilerini doğrulamak için kullanılır. Kurala göre, modeller dizininde depolanır. PizzaModelin ad alanı RazorPagesPizza.Models .

Yeni PizzaModel sınıfınız, aşağıdaki using yönergesiyle Pizza modeli dahil RazorPagesPizza.Models ad alanında tanımlanan model türlerine erişim elde etti:

using RazorPagesPizza.Models;

Pizza model sınıfını inceleyin:

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

Veri ek açıklamaları, uygulandıkları model özellikleri üzerinde zorlamak istediğiniz davranışları belirten özniteliklerdir.

PizzaSınıfı şunları kullanır:

  • [Required] bir özelliğin bir değere sahip olması gerektiğini belirten özniteliği.
  • [Range] bir değeri belirli bir aralığa kısıtlamak için özniteliği.

Daha fazla doğrulama kuralı uygulamaya karar verirseniz, projedeki PageModel sınıf dosyalarından herhangi birini değiştirmek zorunda kalmadan, yalnızca tek bir yerde (Pizza modelinde) öznitelikleri kolayca değiştirebilirsiniz. Bu önemli bir avantajdır!

Ad alanında kullanabileceğiniz kapsamlı bir veri ek açıklaması özniteliği kümesi vardır System.ComponentModel.DataAnnotations . Bu modülün kapsamı için basitleştirilmiş bir örnek sağlanır.

Veri aktarımı nesnesi olarak pizza modeli

Pizza modeli ayrıca bir Veri Aktarımı Nesnesi (DTO) görevi görür. Bir DTO, ağ üzerinden gönderilecek verileri tanımlayan, bu durumda Web API’sine yönelik bir nesnedir. Bu uygulamanın daha gelişmiş bir sürümünde, RazorPagesPizza projesinin PizzaService sınıfı, Pizza Web API 'sine veya yedekleme veritabanına gönderilebilecek ve alınabilecek geçerli bir PIZZA verisi tanımlayan bir DTO olarak modeli kullanır.

Daha sonra, PizzaModel PizzaService var olan Pizzas 'yi listelemek ve yenilerini oluşturmak için sınıfıyla etkileşime geçin.

Bilginizi ölçün

1.

Form gönderimini işlemek için hangi yöntemi kullanıyorsunuz PageModel ?