Sayfalardaki öğretici serisinin 8. bölümü Razor
Gönderen Rick Anderson
Bu bölümde, doğrulama mantığı Movie modele eklenir. Doğrulama kuralları, bir Kullanıcı bir filmi oluşturduğunda veya düzenleişinizde zorlanır.
Doğrulama
Yazılım geliştirmeye yönelik temel bir temel kuru ("D on't R epeon Y ourself") olarak adlandırılır. Razor Sayfalar, işlevlerin bir kez belirtildiği ve uygulama genelinde yansıtıldığı durumlarda geliştirmeyi teşvik eder. Kuru şu şekilde yardımcı olabilir:
- Uygulamadaki kod miktarını azaltın.
- Kodu daha az hata haline getirin ve test ve bakım yapmayı kolaylaştırın.
Sayfalar ve Entity Framework tarafından sunulan doğrulama desteği, Razor kurutma ilkesine iyi bir örnektir:
- Doğrulama kuralları, model sınıfında bildirimli olarak tek bir yerde belirtilir.
- Kurallar uygulamada her yerde zorlanır.
Film modeline doğrulama kuralları ekleme
DataAnnotationsAd alanı şunları sağlar:
- Bir sınıfa veya özelliğe bildirimli olarak uygulanan bir yerleşik doğrulama öznitelikleri kümesi.
[DataType]Biçimlendirme ile yardım ve herhangi bir doğrulama sağlamayan gibi öznitelikleri biçimlendirme.
MovieYerleşik [Required] , [StringLength] , [RegularExpression] ve doğrulama özniteliklerinden yararlanmak için sınıfı güncelleştirin [Range] .
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace RazorPagesMovie.Models
{
public class Movie
{
public int ID { get; set; }
[StringLength(60, MinimumLength = 3)]
[Required]
public string Title { get; set; } = string.Empty;
[Display(Name = "Release Date")]
[DataType(DataType.Date)]
public DateTime ReleaseDate { get; set; }
[Range(1, 100)]
[DataType(DataType.Currency)]
[Column(TypeName = "decimal(18, 2)")]
public decimal Price { get; set; }
[RegularExpression(@"^[A-Z]+[a-zA-Z\s]*$")]
[Required]
[StringLength(30)]
public string Genre { get; set; } = string.Empty;
[RegularExpression(@"^[A-Z]+[a-zA-Z0-9""'\s-]*$")]
[StringLength(5)]
[Required]
public string Rating { get; set; } = string.Empty;
}
}
Doğrulama öznitelikleri, uygulanan model özellikleri üzerinde zorlamak için davranışı belirtir:
[Required]Ve[MinimumLength]öznitelikleri bir özelliğin bir değere sahip olması gerektiğini belirtir. Hiçbir şey, kullanıcının bu doğrulamayı karşılamak için boşluk girmesini engeller.[RegularExpression]Öznitelik, hangi karakterlerin girişi yapabileceğini sınırlamak için kullanılır. Yukarıdaki koddaGenre:- Yalnızca harfler kullanılmalıdır.
- İlk harfin büyük harfle olması gerekir. Sayılar sırasında beyaz boşluklara izin verilir ve özel karakterlere izin verilmez.
RegularExpressionRatingŞunları yapın:- İlk karakterin büyük harf olmasını gerektirir.
- Sonraki boşlukların içindeki özel karakter ve sayılara izin verir. "PG-13" bir derecelendirme için geçerlidir, ancak için başarısız olur
Genre.
[Range]özniteliği, bir değeri belirtilen bir aralık içinde kısıtlar.[StringLength]Özniteliği bir dize özelliğinin en büyük uzunluğunu ve isteğe bağlı olarak en düşük uzunluğunu ayarlayabilir.,,,,,,,,,,,,,,,,,, Gibi değer türleri,
decimalintfloatDateTime[Required]
Yukarıdaki doğrulama kuralları tanıtım için kullanılır, bunlar bir üretim sistemi için en uygun değildir. Örneğin, önceki bir filmi yalnızca iki karakter içeren bir filmi girmeyi önler ve içinde özel karakterlere izin vermez Genre .
doğrulama kurallarının ASP.NET Core tarafından otomatik olarak zorlanmasına yardımcı olur:
- Uygulamayı daha sağlam hale getirin.
- Veritabanına geçersiz veri kaydetme olasılığını azaltın.
Sayfalarda doğrulama hatası Kullanıcı arabirimi Razor
Uygulamayı çalıştırın ve sayfalar/Filmler ' e gidin.
Yeni oluştur bağlantısını seçin. Formu, bazı geçersiz değerlerle doldurun. JQuery istemci tarafı doğrulaması hatayı algıladığında, bir hata iletisi görüntüler.

Not
Ondalık alanlara ondalık virgüller giremeyebilirsiniz. Ondalık bir nokta ve US-English tarih biçimleri için virgül (",") kullanan Ingilizce olmayan yerel ayarlarda jQuery doğrulamasını desteklemek için, uygulamanızı globalize için adımlar uygulamanız gerekir. Ondalık virgülden ekleme hakkında yönergeler için bkz. GitHub sorunu 4076 .
Formun geçersiz bir değer içeren her alanda otomatik olarak bir doğrulama hata iletisi nasıl oluşturulduğuna dikkat edin. Hatalar, Kullanıcı JavaScript devre dışı bırakıldığında, JavaScript ve jQuery kullanılarak istemci tarafı ve sunucu tarafı ile zorlanır.
Önemli bir avantaj, oluşturma veya düzenleme sayfalarında hiçbir kod değişikliği gerekli değildir. Veri ek açıklamaları modele uygulandıktan sonra, doğrulama kullanıcı arabirimi etkinleştirilmiştir. RazorBu öğreticide oluşturulan sayfalar, model sınıfının özelliklerindeki doğrulama özniteliklerini kullanarak doğrulama kurallarını otomatik olarak çekti Movie . Düzenleme sayfasını kullanarak doğrulama testi, aynı doğrulama uygulanır.
Form verileri, istemci tarafı doğrulama hatası kalmayana kadar sunucuya nakledilmez. Form verilerinin aşağıdaki yaklaşımlardan bir veya daha fazlası tarafından nakledilmediğinden emin olun:
- Yöntemine bir kesme noktası koyun
OnPostAsync. Oluştur veya Kaydet' i seçerek formu gönderebilirsiniz. Kesme noktası hiçbir şekilde isabet ettirilmez. - Fiddler aracınıkullanın.
- Ağ trafiğini izlemek için tarayıcı Geliştirici Araçları ' nı kullanın.
Sunucu tarafı doğrulaması
Tarayıcıda JavaScript devre dışı bırakıldığında, formun hatalarla gönderilmesi sunucuya gönderilir.
İsteğe bağlı, test sunucusu-tarafı doğrulaması:
Tarayıcıda JavaScript 'ı devre dışı bırakın. JavaScript tarayıcı geliştirici araçları kullanılarak devre dışı bırakılabilir. Tarayıcıda JavaScript devre dışı bırakılamaz, başka bir tarayıcı deneyin.
OnPostAsyncOluşturma veya düzenleme sayfasının yönteminde bir kesme noktası ayarlayın.Geçersiz verilerle form gönderme.
Model durumunun geçersiz olduğunu doğrulayın:
if (!ModelState.IsValid) { return Page(); }
Alternatif olarak, sunucuda istemci tarafı doğrulamayı devre dışı bırakın.
Aşağıdaki kod, öğreticide daha önce Create. cshtml sayfa scafkatın bir bölümünü gösterir. Bu sayfa oluşturma ve düzenleme sayfaları tarafından kullanılır:
- Başlangıç formunu görüntüleyin.
- Hata durumunda formu yeniden görüntüleyin.
<form method="post">
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
<div class="form-group">
<label asp-for="Movie.Title" class="control-label"></label>
<input asp-for="Movie.Title" class="form-control" />
<span asp-validation-for="Movie.Title" class="text-danger"></span>
</div>
Giriş etiketi Yardımcısı , dataaçıklamaların özniteliklerini kullanır ve istemci tarafında jQuery doğrulaması için gerekli HTML özniteliklerini üretir. Doğrulama etiketi Yardımcısı doğrulama hatalarını görüntüler. Daha fazla bilgi için bkz. doğrulama .
Oluşturma ve düzenleme sayfalarında hiçbir doğrulama kuralı yoktur. Doğrulama kuralları ve hata dizeleri yalnızca Movie sınıfında belirtilmiştir. Bu doğrulama kuralları Razor , modeli düzenlediğiniz sayfalara otomatik olarak uygulanır Movie .
Doğrulama mantığının değişmesi gerektiğinde, yalnızca modelde yapılır. Doğrulama, uygulamanın tamamında tutarlı bir şekilde uygulanır, doğrulama mantığı tek bir yerde tanımlanır. Tek bir yerde doğrulama, kodun temiz kalmasına yardımcı olur ve bakım ve güncelleştirme işlemlerini kolaylaştırır.
DataType özniteliklerini kullan
Sınıfını inceleyin Movie . System.ComponentModel.DataAnnotationsAd alanı, yerleşik doğrulama öznitelikleri kümesine ek olarak biçimlendirme öznitelikleri sağlar. [DataType] özniteliği ReleaseDate ve Price özelliklerine uygulanır.
[Display(Name = "Release Date")]
[DataType(DataType.Date)]
public DateTime ReleaseDate { get; set; }
[Range(1, 100)]
[DataType(DataType.Currency)]
[Column(TypeName = "decimal(18, 2)")]
public decimal Price { get; set; }
[DataType]Öznitelikleri şunları sağlar:
- Görüntüleme altyapısının verileri biçimlendirmek için ipuçları.
<a>URL 'ler ve e-posta için gibi öznitelikleri sağlar<a href="mailto:EmailAddress.com">.
[RegularExpression]Veri biçimini doğrulamak için özniteliğini kullanın. [DataType]Özniteliği, veritabanı iç türünden daha belirgin bir veri türü belirtmek için kullanılır. [DataType] öznitelikler doğrulama öznitelikleri değildir. Örnek uygulamada, yalnızca tarih ve saat olmadan görüntülenir.
DataTypeSabit listesi,,,, ve gibi birçok veri türü sağlar Date Time PhoneNumber Currency EmailAddress .
[DataType]Öznitelikler:
- Uygulamanın, türe özgü özellikleri otomatik olarak sağlamasına olanak sağlayabilir. Örneğin, için bir
mailto:bağlantı oluşturulabilirDataType.EmailAddress. DataType.DateHTML5 'i destekleyen tarayıcılarda bir tarih seçici sağlayabilir.- HTML 5
data-tarayıcıların kullandığı "veri Dash" özniteliği olan HTML 5 ' i yayın. - Herhangi bir doğrulama sağlamamayın .
DataType.Date görüntülenen tarihin biçimini belirtmez. Varsayılan olarak, veri alanı sunucusunun değerine göre varsayılan biçimlere göre CultureInfo görüntülenir.
Verilerin [Column(TypeName = "decimal(18, 2)")] veritabanındaki para birimiyle Entity Framework Core için veri Price ek açıklaması gereklidir. Daha fazla bilgi için bkz. Veri Türleri.
özniteliği, [DisplayFormat] tarih biçimini açıkça belirtmek için kullanılır:
[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
public DateTime ReleaseDate { get; set; }
ayar, ApplyFormatInEditMode değer düzenleme için görüntülendiğinde biçimlendirmenin uygulan olacağını belirtir. Bu davranış bazı alanlar için uygun olabilir. Örneğin, para birimi değerlerde para birimi simgesi genellikle düzenleme kullanıcı arabiriminde isnlanmaz.
[DisplayFormat]özniteliği tek başına kullanılabilir, ancak genellikle özniteliğini kullanmak iyi bir [DataType] fikirdir. özniteliği, verileri ekranda işlemenin aksine verilerin [DataType] semantiklerini iletir. [DataType]özniteliği ile mevcut olmayan aşağıdaki avantajları [DisplayFormat] sağlar:
- Tarayıcı HTML5 özelliklerini etkinleştirebilir; örneğin bir takvim denetimi, yerel ayarın uygun para birimi simgesini, e-posta bağlantılarını vb. gösterebilir.
- Varsayılan olarak, tarayıcı verileri yerel ayarına göre doğru biçimi kullanarak işler.
- özniteliği,
[DataType]ASP.NET Core çerçevenin verileri işlemek için doğru alan şablonunu seçmesini sağlar. tekDisplayFormatbaşına kullanılıyorsa , dize şablonunu kullanır.
Not: jQuery doğrulaması ve [Range] özniteliğiyle birlikte DateTime çalışmıyor. Örneğin, tarih belirtilen aralıkta olsa bile aşağıdaki kod her zaman bir istemci tarafı doğrulama hatası görüntüler:
[Range(typeof(DateTime), "1/1/1966", "1/1/2020")]
Modellerde sabit tarihleri derlemeyi önlemek en iyi yöntemdir, bu nedenle özniteliğini [Range] kullanmak DateTime önerilmez. Tarih aralıkları ve sık değişiklik yapılan diğer değerler için yapılandırmayı kodda belirtmek yerine kullanın.
Aşağıdaki kod, bir satırda özniteliklerin bir araya nasıl birleştir olduğunu gösterir:
using System;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace RazorPagesMovie.Models
{
public class Movie
{
public int ID { get; set; }
[StringLength(60, MinimumLength = 3)]
public string Title { get; set; } = string.Empty;
[Display(Name = "Release Date"), DataType(DataType.Date)]
public DateTime ReleaseDate { get; set; }
[RegularExpression(@"^[A-Z]+[a-zA-Z\s]*$"), Required, StringLength(30)]
public string Genre { get; set; } = string.Empty;
[Range(1, 100), DataType(DataType.Currency)]
[Column(TypeName = "decimal(18, 2)")]
public decimal Price { get; set; }
[RegularExpression(@"^[A-Z]+[a-zA-Z0-9""'\s-]*$"), StringLength(5)]
public string Rating { get; set; } = string.Empty;
}
}
Kullanmaya başlayın Razor Sayfalar ve EF Core, Sayfalar ile gelişmiş EF Core işlemleri Razor gösterir.
Geçişleri uygulama
Sınıfına uygulanan DataAnnotations, şemayı değiştirir. Örneğin, alana uygulanan DataAnnotations: Title
[StringLength(60, MinimumLength = 3)]
[Required]
public string Title { get; set; } = string.Empty;
- Karakterleri 60 ile sınırlar.
- Bir değere izin
nullvermez.
Tablo Movie şu anda aşağıdaki şemaya sahip:
CREATE TABLE [dbo].[Movie] (
[ID] INT IDENTITY (1, 1) NOT NULL,
[Title] NVARCHAR (MAX) NULL,
[ReleaseDate] DATETIME2 (7) NOT NULL,
[Genre] NVARCHAR (MAX) NULL,
[Price] DECIMAL (18, 2) NOT NULL,
[Rating] NVARCHAR (MAX) NULL,
CONSTRAINT [PK_Movie] PRIMARY KEY CLUSTERED ([ID] ASC)
);
Yukarıdaki şema değişiklikleri EF'nin özel durum oluşturur. Ancak şemanın modelle tutarlı olması için bir geçiş oluşturun.
Araçlar menüsünden Konsol'NuGet Paket Yöneticisi > Paket Yöneticisi seçin. PMC'ye aşağıdaki komutları girin:
Add-Migration New_DataAnnotations
Update-Database
Update-Database sınıfının Up yöntemlerini New_DataAnnotations çalıştırır. Up yöntemini inceleyin:
public partial class New_DataAnnotations : Migration
{
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.AlterColumn<string>(
name: "Title",
table: "Movie",
type: "nvarchar(60)",
maxLength: 60,
nullable: false,
oldClrType: typeof(string),
oldType: "nvarchar(max)");
migrationBuilder.AlterColumn<string>(
name: "Rating",
table: "Movie",
type: "nvarchar(5)",
maxLength: 5,
nullable: false,
oldClrType: typeof(string),
oldType: "nvarchar(max)");
migrationBuilder.AlterColumn<string>(
name: "Genre",
table: "Movie",
type: "nvarchar(30)",
maxLength: 30,
nullable: false,
oldClrType: typeof(string),
oldType: "nvarchar(max)");
}
Güncelleştirilmiş Movie tablo aşağıdaki şemaya sahip:
CREATE TABLE [dbo].[Movie] (
[ID] INT IDENTITY (1, 1) NOT NULL,
[Title] NVARCHAR (60) NOT NULL,
[ReleaseDate] DATETIME2 (7) NOT NULL,
[Genre] NVARCHAR (30) NOT NULL,
[Price] DECIMAL (18, 2) NOT NULL,
[Rating] NVARCHAR (5) NOT NULL,
CONSTRAINT [PK_Movie] PRIMARY KEY CLUSTERED ([ID] ASC)
);
Azure’da Yayımlama
Azure'a dağıtma hakkında daha fazla bilgi için bkz. Öğretici: ASP.NET Core ile Azure'da bir SQL Veritabanı.
Bu Pages tanıtımını tamamladıktan sonra Razor teşekkürler. Kullanmaya başlayın Razor Sayfalar ve EF Core, bu öğreticiye harika bir takiptir.
Ek kaynaklar
Bu bölümde modele doğrulama mantığı Movie eklenir. Doğrulama kuralları, kullanıcı bir film oluşturduğunda veya düzenlerken uygulanır.
Doğrulama
Yazılım geliştirmenin önemli bir planı DRY ("D on't R epeat Y ourself") olarak adlandırılır. Razor Sayfalar, işlevselliğin bir kez belirtildiklerine ve uygulamanın tamamlarına yansıtıldıklarına göre geliştirmeyi teşvik ediyor. DRY yardımcı olabilir:
- Bir uygulamanın kod miktarını azaltma.
- Kodu daha az hataya karşı korumak, test etmek ve bakımını yapmak daha kolay hale getirir.
Pages ve Entity Framework tarafından sağlanan doğrulama Razor desteği DRY ilkesine iyi bir örnektir:
- Doğrulama kuralları, model sınıfında bildirimli olarak tek bir yerde belirtilir.
- Kurallar uygulamanın her yerinde uygulanır.
Film modeline doğrulama kuralları ekleme
Ad DataAnnotations alanı şunları sağlar:
- Bir sınıfa veya özelliğe bildirimli olarak uygulanan yerleşik doğrulama öznitelikleri kümesi.
- Bu gibi öznitelikleri
[DataType]biçimlendirmek biçimlendirmeye yardımcı olur ve doğrulamayı sağlamaz.
Yerleşik , , ve Movie doğrulama özniteliklerinden yararlanmak [Required] için [StringLength] [RegularExpression] [Range] sınıfını güncelleştirin.
using System;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace RazorPagesMovie.Models
{
public class Movie
{
public int ID { get; set; }
[StringLength(60, MinimumLength = 3)]
[Required]
public string Title { get; set; }
[Display(Name = "Release Date")]
[DataType(DataType.Date)]
public DateTime ReleaseDate { get; set; }
[Range(1, 100)]
[DataType(DataType.Currency)]
[Column(TypeName = "decimal(18, 2)")]
public decimal Price { get; set; }
[RegularExpression(@"^[A-Z]+[a-zA-Z\s]*$")]
[Required]
[StringLength(30)]
public string Genre { get; set; }
[RegularExpression(@"^[A-Z]+[a-zA-Z0-9""'\s-]*$")]
[StringLength(5)]
[Required]
public string Rating { get; set; }
}
}
Doğrulama öznitelikleri, uygulandığı model özelliklerine uygulanacak davranışı belirtir:
ve
[Required][MinimumLength]öznitelikleri, bir özelliğin bir değere sahip olması gerektiğini gösteriyor. Hiçbir şey kullanıcının bu doğrulamayı karşılamak için boşluk girmesini engellemez.özniteliği,
[RegularExpression]hangi karakterlerin girile olduğunu sınırlamak için kullanılır. YukarıdakiGenrekodda:- Yalnızca harf kullan gerekir.
- İlk harfin büyük harf olması gerekir. Boşluklara izin verilirken sayılara ve özel karakterlere izin verilmez.
:
RegularExpressionRating- İlk karakterin büyük harf olması gerekir.
- Sonraki boşluklarda özel karakterlere ve sayılara izin verir. "PG-13" derecelendirme için geçerlidir, ancak için başarısız
Genreolur.
[Range]özniteliği, bir değeri belirtilen bir aralık içinde kısıtlar.özniteliği,
[StringLength]bir dize özelliğinin maksimum uzunluğunu ve isteğe bağlı olarak en düşük uzunluğunu ayarlanabilir., , ,
decimalgibi değer türleri doğal olarak gereklidir veintfloatDateTimeözniteliğine ihtiyaç[Required]yoktur.
Önceki doğrulama kuralları gösterim için kullanılır, üretim sistemi için en uygun değildir. Örneğin, yukarıdaki yalnızca iki karakterli bir film girmeyi önler ve içinde özel karakterlere izin Genre vermez.
Doğrulama kurallarının bir uygulama tarafından otomatik olarak ASP.NET Core yardımcı olur:
- Uygulamayı daha sağlam hale indirin.
- Geçersiz verileri veritabanına kaydetme ihtimalini azaltma.
Sayfalarda Doğrulama Hatası Kullanıcı Razor Arabirimi
Uygulamayı çalıştırın ve Sayfalar/Filmler'e gidin.
Yeni Oluştur bağlantısını seçin. Formu bazı geçersiz değerlerle doldurun. jQuery istemci tarafı doğrulaması hatayı algılasa bir hata iletisi görüntüler.

Not
Ondalık alanlara ondalık virgüller giremeyebilirsiniz. Ondalık bir nokta ve US-English tarih biçimleri için virgül (",") kullanan Ingilizce olmayan yerel ayarlarda jQuery doğrulamasını desteklemek için, uygulamanızı globalize için adımlar uygulamanız gerekir. Ondalık virgülden ekleme hakkında yönergeler için bkz. GitHub sorunu 4076 .
Formun her alanda geçersiz değer içeren bir doğrulama hata iletisini otomatik olarak işleyene dikkat eder. Hatalar, JavaScript ve jQuery kullanılarak hem istemci tarafında hem de kullanıcı JavaScript devre dışı bırakılmıştır.
Oluşturma veya Düzenleme sayfalarında kod değişikliğine gerek yoktur. Modele veri ek açıklamaları uygulandıktan sonra doğrulama kullanıcı arabirimi etkinleştirildi. Bu Razor öğreticide oluşturulan Sayfalar, model sınıfının özelliklerinde doğrulama özniteliklerini kullanarak doğrulama kurallarını otomatik olarak Movie aldı. Düzenle sayfasını kullanarak doğrulamayı test edin; aynı doğrulama uygulanır.
İstemci tarafı doğrulama hatası olmayana kadar form verileri sunucuya gönderildi. Form verilerinin aşağıdaki yaklaşımlardan biri veya daha fazlası tarafından gönderildi olmadığını doğrulayın:
- yöntemine bir kesme noktası
OnPostAsynckoyma. Oluştur veya Kaydet'i seçerek formu gönderin. Kesme noktasına hiçbir zaman isabet olmadı. - Fiddler aracını kullanın.
- Ağ trafiğini izlemek için tarayıcı geliştirici araçlarını kullanın.
Sunucu tarafı doğrulama
Tarayıcıda JavaScript devre dışı bırakılmıştır ve formu hatalarla birlikte göndermeniz sunucuya gönderecektir.
İsteğe bağlı, sunucu tarafı doğrulamasını test etmek:
Tarayıcıda JavaScript'i devre dışı bırakma. JavaScript, tarayıcının geliştirici araçları kullanılarak devre dışı bırakılabilir. Tarayıcıda JavaScript devre dışı bırakılamazsa başka bir tarayıcıyı deneyin.
Oluşturma veya Düzenleme sayfasının
OnPostAsyncyönteminde bir kesme noktası ayarlayın.Geçersiz verilerle bir form gönderin.
Model durumunun geçersiz olduğunu doğrulayın:
if (!ModelState.IsValid) { return Page(); }
Alternatif olarak, sunucusunda istemci tarafı doğrulamayı devre dışı bırakabilirsiniz.
Aşağıdaki kod, öğreticinin önceki kısımlarında iskelesi yapılan Create.cshtml sayfasının bir bölümünü gösterir. Oluşturma ve Düzenleme sayfaları tarafından aşağıdakiler için kullanılır:
- İlk formu görüntüler.
- Bir hata durumunda formu yeniden oynatma.
<form method="post">
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
<div class="form-group">
<label asp-for="Movie.Title" class="control-label"></label>
<input asp-for="Movie.Title" class="form-control" />
<span asp-validation-for="Movie.Title" class="text-danger"></span>
</div>
Giriş Etiketi Yardımcısı DataAnnotations özniteliklerini kullanır ve istemci tarafında jQuery Doğrulaması için gereken HTML özniteliklerini üretir. Doğrulama Etiketi Yardımcısı doğrulama hatalarını görüntüler. Daha fazla bilgi için bkz. Doğrulama.
Oluşturma ve Düzenleme sayfalarının içinde doğrulama kuralı yoktur. Doğrulama kuralları ve hata dizeleri yalnızca sınıfında Movie belirtilir. Bu doğrulama kuralları, modeli düzenlemek Razor için Sayfalar'a otomatik olarak Movie uygulanır.
Doğrulama mantığının değişmesi gerekirken yalnızca modelde yapılır. Doğrulama uygulama boyunca tutarlı bir şekilde uygulanır, doğrulama mantığı tek bir yerde tanımlanır. Doğrulama tek bir yerde kodun temiz tutmaya yardımcı olur, bakım ve güncelleştirmeyi kolaylaştırır.
DataType Özniteliklerini Kullanma
sınıfını Movie inceleme. Ad System.ComponentModel.DataAnnotations alanı, yerleşik doğrulama öznitelikleri kümesine ek olarak biçimlendirme öznitelikleri sağlar. [DataType] özniteliği ReleaseDate ve Price özelliklerine uygulanır.
[Display(Name = "Release Date")]
[DataType(DataType.Date)]
public DateTime ReleaseDate { get; set; }
[Range(1, 100)]
[DataType(DataType.Currency)]
public decimal Price { get; set; }
Öznitelikler [DataType] şunları sağlar:
- Verileri biçimlendirmek için görünüm altyapısına ipuçları.
- URL'ler ve
<a>e-posta için gibi<a href="mailto:EmailAddress.com">öznitelikler sağlar.
Verilerin [RegularExpression] biçimini doğrulamak için özniteliğini kullanın. özniteliği, [DataType] veritabanı iç türünden daha özel bir veri türü belirtmek için kullanılır. [DataType] öznitelikler doğrulama öznitelikleri değil. Örnek uygulamada, saat olmadan yalnızca tarih görüntülenir.
Numaralama , ve DataType daha fazlası gibi birçok veri türü Date Time PhoneNumber Currency EmailAddress sağlar.
[DataType]Öznitelikler:
- Uygulamanın türe özgü özellikleri otomatik olarak sağlamayı etkinleştirebilir. Örneğin, için
mailto:bir bağlantıDataType.EmailAddressoluşturulabilir. - HTML5'i destekleyen
DataType.Datetarayıcılarda bir tarih seçici sağlar. - HTML 5
data-tarayıcılarının tükettiği HTML 5 , "data dash" olarak okunan öznitelikleri yayın. - Herhangi bir doğrulama sağlamayın.
DataType.Date görüntülenen tarihin biçimini belirtmez. Varsayılan olarak, veri alanı sunucusunun değerine göre varsayılan biçimlere göre CultureInfo görüntülenir.
Verilerin [Column(TypeName = "decimal(18, 2)")] veritabanındaki para birimiyle Entity Framework Core için veri Price ek açıklaması gereklidir. Daha fazla bilgi için bkz. Veri Türleri.
özniteliği, [DisplayFormat] tarih biçimini açıkça belirtmek için kullanılır:
[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
public DateTime ReleaseDate { get; set; }
ayar, ApplyFormatInEditMode değer düzenleme için görüntülendiğinde biçimlendirmenin uygulan olacağını belirtir. Bu davranış bazı alanlar için uygun olabilir. Örneğin, para birimi değerlerde para birimi simgesi genellikle düzenleme kullanıcı arabiriminde isnlanmaz.
[DisplayFormat]özniteliği tek başına kullanılabilir, ancak genellikle özniteliğini kullanmak iyi bir [DataType] fikirdir. özniteliği, verileri ekranda işlemenin aksine verilerin [DataType] semantiklerini iletir. [DataType]özniteliği ile mevcut olmayan aşağıdaki avantajları [DisplayFormat] sağlar:
- Tarayıcı HTML5 özelliklerini etkinleştirebilir; örneğin bir takvim denetimi, yerel ayarın uygun para birimi simgesini, e-posta bağlantılarını vb. gösterebilir.
- Varsayılan olarak, tarayıcı verileri yerel ayarına göre doğru biçimi kullanarak işler.
- özniteliği,
[DataType]ASP.NET Core çerçevenin verileri işlemek için doğru alan şablonunu seçmesini sağlar. tekDisplayFormatbaşına kullanılıyorsa , dize şablonunu kullanır.
Not: jQuery doğrulaması ve [Range] özniteliğiyle birlikte DateTime çalışmıyor. Örneğin, tarih belirtilen aralıkta olsa bile aşağıdaki kod her zaman bir istemci tarafı doğrulama hatası görüntüler:
[Range(typeof(DateTime), "1/1/1966", "1/1/2020")]
Modellerde sabit tarihleri derlemeyi önlemek en iyi yöntemdir, bu nedenle özniteliğini [Range] kullanmak DateTime önerilmez. Tarih aralıkları ve sık değişiklik yapılan diğer değerler için yapılandırmayı kodda belirtmek yerine kullanın.
Aşağıdaki kod, bir satırda özniteliklerin bir araya nasıl birleştir olduğunu gösterir:
public class Movie
{
public int ID { get; set; }
[StringLength(60, MinimumLength = 3)]
public string Title { get; set; }
[Display(Name = "Release Date"), DataType(DataType.Date)]
public DateTime ReleaseDate { get; set; }
[RegularExpression(@"^[A-Z]+[a-zA-Z\s]*$"), Required, StringLength(30)]
public string Genre { get; set; }
[Range(1, 100), DataType(DataType.Currency)]
[Column(TypeName = "decimal(18, 2)")]
public decimal Price { get; set; }
[RegularExpression(@"^[A-Z]+[a-zA-Z0-9""'\s-]*$"), StringLength(5)]
public string Rating { get; set; }
}
Kullanmaya başlayın Razor Sayfalar ve EF Core, Sayfalar ile gelişmiş EF Core işlemleri Razor gösterir.
Geçişleri uygulama
Sınıfına uygulanan DataAnnotations, şemayı değiştirir. Örneğin, alana uygulanan DataAnnotations: Title
[StringLength(60, MinimumLength = 3)]
[Required]
public string Title { get; set; }
- Karakterleri 60 ile sınırlar.
- Bir değere izin
nullvermez.
Tablo Movie şu anda aşağıdaki şemaya sahip:
CREATE TABLE [dbo].[Movie] (
[ID] INT IDENTITY (1, 1) NOT NULL,
[Title] NVARCHAR (MAX) NULL,
[ReleaseDate] DATETIME2 (7) NOT NULL,
[Genre] NVARCHAR (MAX) NULL,
[Price] DECIMAL (18, 2) NOT NULL,
[Rating] NVARCHAR (MAX) NULL,
CONSTRAINT [PK_Movie] PRIMARY KEY CLUSTERED ([ID] ASC)
);
Yukarıdaki şema değişiklikleri EF'nin özel durum oluşturur. Ancak şemanın modelle tutarlı olması için bir geçiş oluşturun.
Araçlar menüsünden Konsol'NuGet Paket Yöneticisi > Paket Yöneticisi seçin. PMC'ye aşağıdaki komutları girin:
Add-Migration New_DataAnnotations
Update-Database
Update-Database sınıfının Up yöntemlerini New_DataAnnotations çalıştırır. Up yöntemini inceleyin:
public partial class New_DataAnnotations : Migration
{
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.AlterColumn<string>(
name: "Title",
table: "Movie",
maxLength: 60,
nullable: false,
oldClrType: typeof(string),
oldNullable: true);
migrationBuilder.AlterColumn<string>(
name: "Rating",
table: "Movie",
maxLength: 5,
nullable: false,
oldClrType: typeof(string),
oldNullable: true);
migrationBuilder.AlterColumn<string>(
name: "Genre",
table: "Movie",
maxLength: 30,
nullable: false,
oldClrType: typeof(string),
oldNullable: true);
}
Güncelleştirilmiş Movie tablo aşağıdaki şemaya sahip:
CREATE TABLE [dbo].[Movie] (
[ID] INT IDENTITY (1, 1) NOT NULL,
[Title] NVARCHAR (60) NOT NULL,
[ReleaseDate] DATETIME2 (7) NOT NULL,
[Genre] NVARCHAR (30) NOT NULL,
[Price] DECIMAL (18, 2) NOT NULL,
[Rating] NVARCHAR (5) NOT NULL,
CONSTRAINT [PK_Movie] PRIMARY KEY CLUSTERED ([ID] ASC)
);
Azure’da Yayımlama
Azure'a dağıtma hakkında daha fazla bilgi için bkz. Öğretici: ASP.NET Core ile Azure'da bir SQL Veritabanı.
Bu Pages tanıtımını tamamladıktan sonra Razor teşekkürler. Kullanmaya başlayın Razor Sayfalar ve EF Core, bu öğreticiye harika bir takiptir.