IDataErrorInfo Arabirimi ile Doğrulama (VB)
tarafından Stephen Walther
Stephen Walther, bir model sınıfında IDataErrorInfo arabirimini uygulayarak özel doğrulama hata iletilerinin nasıl görüntüleneceğini gösterir.
Bu öğreticinin amacı, bir ASP.NET MVC uygulamasında doğrulama gerçekleştirmeye yönelik bir yaklaşımı açıklamaktır. Gerekli form alanları için değer sağlamadan birinin HTML formu göndermesini nasıl önleyeceğinizi öğrenirsiniz. Bu öğreticide, IErrorDataInfo arabirimini kullanarak doğrulama gerçekleştirmeyi öğreneceksiniz.
Varsayımlar
Bu öğreticide MoviesDB veritabanını ve Filmler veritabanı tablosunu kullanacağım. Bu tabloda aşağıdaki sütunlar bulunur:
Sütun Adı | Veri Türü | Null'lara İzin Ver |
---|---|---|
Id | int | Yanlış |
Başlık | Nvarchar(100) | Yanlış |
Yönetmen | Nvarchar(100) | Yanlış |
DateReleased | DateTime | Yanlış |
Bu öğreticide, veritabanı modeli sınıflarımı oluşturmak için Microsoft Entity Framework kullanıyorum. Entity Framework tarafından oluşturulan Movie sınıfı Şekil 1'de görüntülenir.
Şekil 01: Film varlığı (Tam boyutlu görüntüyü görüntülemek için tıklayın)
Not
Veritabanı modeli sınıflarınızı oluşturmak üzere Entity Framework kullanma hakkında daha fazla bilgi edinmek için Entity Framework ile Model Sınıfları Oluşturma başlıklı öğreticime bakın.
Denetleyici Sınıfı
Filmleri listelemek ve yeni filmler oluşturmak için Giriş denetleyicisini kullanırız. Bu sınıfın kodu Listeleme 1'de yer alır.
Liste 1 - Controllers\HomeController.vb
Public Class HomeController
Inherits Controller
Private _db As New MoviesDBEntities()
Public Function Index() As ActionResult
Return View(_db.MovieSet.ToList())
End Function
Public Function Create() As ActionResult
Return View()
End Function
<AcceptVerbs(HttpVerbs.Post)> _
Public Function Create(<Bind(Exclude := "Id")> ByVal movieToCreate As Movie) As ActionResult
' Validate
If (Not ModelState.IsValid) Then
Return View()
End If
' Add to database
Try
_db.AddToMovieSet(movieToCreate)
_db.SaveChanges()
Return RedirectToAction("Index")
Catch
Return View()
End Try
End Function
End Class
Listeleme 1'deki Giriş denetleyicisi sınıfı iki Create() eylemi içerir. İlk eylem, yeni film oluşturmaya yönelik HTML formunu görüntüler. İkinci Create() eylemi, yeni filmin veritabanına gerçek ekleme işlemini gerçekleştirir. İlk Create() eylemi tarafından görüntülenen form sunucuya gönderildiğinde ikinci Create() eylemi çağrılır.
İkinci Create() eyleminin aşağıdaki kod satırlarını içerdiğine dikkat edin:
' Validate
If (Not ModelState.IsValid) Then
Return View()
End If
IsValid özelliği, doğrulama hatası olduğunda false döndürür. Bu durumda, film oluşturmaya yönelik HTML formunu içeren Oluştur görünümü yeniden görüntülenir.
Kısmi Sınıf Oluşturma
Movie sınıfı Entity Framework tarafından oluşturulur. MovieDBModel.edmx dosyasını Çözüm Gezgini penceresinde genişletip MoviesDBModel.Tasarım Aracı açarsanız Movie sınıfının kodunu görebilirsiniz. Kod Düzenleyicisi'ndeki vb dosyası (bkz. Şekil 2).
Şekil 02: Film varlığının kodu (Tam boyutlu görüntüyü görüntülemek için tıklayın)
Movie sınıfı kısmi bir sınıftır. Bu, Movie sınıfının işlevselliğini genişletmek için aynı ada sahip başka bir kısmi sınıf ekleyebileceğimiz anlamına gelir. Doğrulama mantığımızı yeni kısmi sınıfa ekleyeceğiz.
Listeleme 2'deki sınıfı Models klasörüne ekleyin.
Listeleme 2 - Models\Movie.vb
Public Partial Class Movie
End Class
Liste 2'deki sınıfın kısmi değiştirici içerdiğine dikkat edin. Bu sınıfa eklediğiniz tüm yöntemler veya özellikler, Entity Framework tarafından oluşturulan Movie sınıfının bir parçası olur.
OnChanging ve OnChanged Kısmi Yöntemler Ekleme
Entity Framework bir varlık sınıfı oluşturduğunda, Entity Framework sınıfa otomatik olarak kısmi yöntemler ekler. Entity Framework, sınıfın her özelliğine karşılık gelen OnChanging ve OnChanged kısmi yöntemleri oluşturur.
Movie sınıfı söz konusu olduğunda Entity Framework aşağıdaki yöntemleri oluşturur:
- OnIdChanging
- OnIdChanged
- OnTitleChanging
- OnTitleChanged
- OnDirectorChanging
- OnDirectorChanged
- OnDateReleasedChanging
- OnDateReleasedChanged
İlgili özellik değiştirilmeden hemen önce OnChanging yöntemi çağrılır. Özellik değiştirildikten hemen sonra OnChanged yöntemi çağrılır.
Movie sınıfına doğrulama mantığı eklemek için bu kısmi yöntemlerden yararlanabilirsiniz. Listeleme 3'teki Film sınıfı güncelleştirmesi, Başlık ve Yönetmen özelliklerine boş değerler atandığını doğrular.
Not
Kısmi yöntem, uygulamanız gerekmeyen bir sınıfta tanımlanan bir yöntemdir. Kısmi bir yöntem uygulamazsanız, derleyici yöntem imzasını ve yöntemine yapılan tüm çağrıları kaldırır, böylece kısmi yöntemle ilişkili çalışma zamanı maliyetleri yoktur. Visual Studio Code Düzenleyicisi'nde kısmi bir yöntem eklemek için kısmi anahtar sözcüğünü yazabilir ve ardından uygulanacak kısmi değerlerin listesini görüntülemek için bir boşluk ekleyebilirsiniz.
Liste 3 - Models\Movie.vb
Imports System.ComponentModel
Partial Public Class Movie
Implements IDataErrorInfo
Private _errors As New Dictionary(Of String, String)()
Private Sub OnTitleChanging(ByVal value As String)
If value.Trim().Length = 0 Then
_errors.Add("Title", "Title is required.")
End If
End Sub
Private Sub OnDirectorChanging(ByVal value As String)
If value.Trim().Length = 0 Then
_errors.Add("Director", "Director is required.")
End If
End Sub
End Class
Örneğin, Title özelliğine boş bir dize atamayı denerseniz, _errors adlı sözlüğe bir hata iletisi atanır.
Bu noktada, Title özelliğine boş bir dize atadığınızda ve özel _errors alanına bir hata eklendiğinde hiçbir şey olmaz. Bu doğrulama hatalarını ASP.NET MVC çerçevesine göstermek için IDataErrorInfo arabirimini uygulamamız gerekir.
IDataErrorInfo Arabirimini Uygulama
IDataErrorInfo arabirimi, ilk sürümden bu yana .NET framework'ün bir parçası olmuştur. Bu arabirim çok basit bir arabirimdir:
Public Interface IDataErrorInfo
Default ReadOnly Property Item(ByVal columnName As String) As String
ReadOnly Property [Error]() As String
End Interface
Bir sınıf IDataErrorInfo arabirimini uygularsa, ASP.NET MVC çerçevesi sınıfının bir örneğini oluştururken bu arabirimi kullanır. Örneğin, Home controller Create() eylemi Movie sınıfının bir örneğini kabul eder:
<AcceptVerbs(HttpVerbs.Post)> _
Public Function Create(<Bind(Exclude := "Id")> ByVal movieToCreate As Movie) As ActionResult
' Validate
If (Not ModelState.IsValid) Then
Return View()
End If
' Add to database
Try
_db.AddToMovieSet(movieToCreate)
_db.SaveChanges()
Return RedirectToAction("Index")
Catch
Return View()
End Try
End Function
ASP.NET MVC çerçevesi, model bağlayıcısı (DefaultModelBinder) kullanarak Create() eylemine geçirilen Film örneğini oluşturur. Model bağlayıcısı, HTML form alanlarını Movie nesnesinin bir örneğine bağlayarak Movie nesnesinin bir örneğini oluşturmakla sorumludur.
DefaultModelBinder, bir sınıfın IDataErrorInfo arabirimini uygulayıp uygulamadığını algılar. Bir sınıf bu arabirimi uygularsa model bağlayıcısı, sınıfın her özelliği için IDataErrorInfo.this dizin oluşturucusunu çağırır. Dizin oluşturucu bir hata iletisi döndürürse model bağlayıcısı bu hata iletisini otomatik olarak model durumuna ekler.
DefaultModelBinder ayrıca IDataErrorInfo.Error özelliğini de denetler. Bu özellik, sınıfıyla ilişkili özelliğe özgü olmayan doğrulama hatalarını temsil etmek için tasarlanmıştır. Örneğin, Movie sınıfının birden çok özelliğinin değerlerine bağlı olan bir geçerlilik kuralını zorunlu kılmak isteyebilirsiniz. Bu durumda Error özelliğinden bir doğrulama hatası döndürebilirsiniz.
Listing 4'teki güncelleştirilmiş Movie sınıfı, IDataErrorInfo arabirimini uygular.
Listeleme 4 - Models\Movie.vb (IDataErrorInfo uygular)
Imports System.ComponentModel
Partial Public Class Movie
Implements IDataErrorInfo
Private _errors As New Dictionary(Of String, String)()
Private Sub OnTitleChanging(ByVal value As String)
If value.Trim().Length = 0 Then
_errors.Add("Title", "Title is required.")
End If
End Sub
Private Sub OnDirectorChanging(ByVal value As String)
If value.Trim().Length = 0 Then
_errors.Add("Director", "Director is required.")
End If
End Sub
#Region "IDataErrorInfo Members"
Public ReadOnly Property [Error]() As String Implements IDataErrorInfo.Error
Get
Return String.Empty
End Get
End Property
Default Public ReadOnly Property Item(ByVal columnName As String) As String Implements IDataErrorInfo.Item
Get
If _errors.ContainsKey(columnName) Then
Return _errors(columnName)
End If
Return String.Empty
End Get
End Property
#End Region
End Class
Liste 4'te dizin oluşturucu özelliği, dizin oluşturucuya geçirilen özellik adına karşılık gelen bir anahtar içerip içermediğini görmek için _errors koleksiyonunu denetler. özelliğiyle ilişkili doğrulama hatası yoksa boş bir dize döndürülür.
Değiştirilen Movie sınıfını kullanmak için Giriş denetleyicisini herhangi bir şekilde değiştirmeniz gerekmez. Şekil 3'te görüntülenen sayfa, Başlık veya Yönetmen form alanları için değer girildiğinde ne olduğunu gösterir.
Şekil 03: Eksik değerleri olan bir form (Tam boyutlu görüntüyü görüntülemek için tıklayın)
DateReleased değerinin otomatik olarak doğrulandığına dikkat edin. DateReleased özelliği NULL değerleri kabul etmediğinden, DefaultModelBinder değeri olmadığında bu özellik için otomatik olarak bir doğrulama hatası oluşturur. DateReleased özelliğinin hata iletisini değiştirmek istiyorsanız özel bir model bağlayıcısı oluşturmanız gerekir.
Özet
Bu öğreticide, doğrulama hata iletileri oluşturmak için IDataErrorInfo arabirimini kullanmayı öğrendiniz. İlk olarak, Entity Framework tarafından oluşturulan kısmi Movie sınıfının işlevselliğini genişleten kısmi bir Movie sınıfı oluşturduk. Ardından, OnTitleChanging() ve OnDirectorChanging() film sınıfı kısmi yöntemlerine doğrulama mantığı ekledik. Son olarak, bu doğrulama iletilerini ASP.NET MVC çerçevesine sunmak için IDataErrorInfo arabirimini uyguladık.
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin