Veri Ek Açıklama Doğrulayıcıları ile Doğrulama (VB)

Microsoft tarafından

ASP.NET bir MVC uygulaması içinde doğrulama gerçekleştirmek için Veri Açıklama Modeli Bağlayıcısı'ndan yararlanın. Microsoft Entity Framework'de farklı doğrulama özniteliklerini nasıl kullanacağınızı ve bunlarla nasıl çalışacağınızı öğrenin.

Bu eğitimde, bir ASP.NET MVC uygulamasında doğrulama gerçekleştirmek için Veri Ek Açıklama doğrulayıcılarını nasıl kullanacağınızı öğrenirsiniz. Veri Ek Açıklama doğrulayıcılarını kullanmanın avantajı, bir sınıf özelliğine yalnızca bir veya daha fazla öznitelik (Gerekli veya StringLength özniteliği gibi) ekleyerek doğrulama gerçekleştirmenize olanak sağlamasıdır.

Veri Ek Açıklama doğrulayıcılarını kullanamadan önce Veri Ek Açıklamaları Model Bağlayıcısını indirmeniz gerekir. CodePlexweb sitesinden Veri Ek Açıklamaları Model Bağlayıcı Örneğini buraya tıklayarak indirebilirsiniz.

Veri Ek Açıklamaları Modeli Bağlayıcısı'nın Microsoft ASP.NET MVC çerçevesinin resmi bir parçası olmadığını anlamak önemlidir. Veri Ek Açıklamaları Model Bağlayıcısı Microsoft ASP.NET MVC ekibi tarafından oluşturulmuş olsa da, Microsoft bu öğreticide açıklanan ve kullanılan Veri Ek Açıklamaları Modeli Bağlayıcısı için resmi ürün desteği sunmaz.

Veri Açıklama Modeli Bağlayıcısını Kullanma

Veri Ek Açıklamaları Model Bağlayıcısı'nı ASP.NET bir MVC uygulamasında kullanmak için öncelikle Microsoft.Web.Mvc.DataAnnotations.dll derlemesine ve System.ComponentModel.DataAnnotations.dll derlemesine bir başvuru eklemeniz gerekir. Menü seçeneğini seçin Proje, Referans Ekle. Sonraki gözat sekmesini tıklatın ve Veri Ek Açıklamaları Model Bağlayıcı örnek indirilen (ve günülünü) indirdiğiniz konuma göz atın (Bkz. Şekil 1).

Şekil 1: Veri Ek Açıklamaları Model Bağlayıcısına başvuru ekleme (Tam boyutlu görüntüyü görüntülemek için tıklayınız)

Hem Microsoft.Web.Mvc.DataAnnotations.dll derlemesini hem de System.ComponentModel.DataAnnotations.dll derlemesini seçin ve Tamam düğmesini tıklatın.

System.ComponentModel.DataAnnotations.dll derlemesi .NET Framework Service Pack 1 ile Birlikte Veri Ek Açıklamaları Model Bağlayıcısı ile kullanamazsınız. Data Ek Açıklamaları Model Bağlayıcı Örnek indir ile birlikte System.ComponentModel.DataAnnotations.dll derleme sürümünü kullanmanız gerekir.

Son olarak, Global.asax dosyasına DataAnnotations Model Bağlayıcısı'nı kaydetmeniz gerekir. Uygulama_Başlat() yönteminin_aşağıdaki gibi görünmesi için Uygulama Başlat() olay işleyicisine aşağıdaki kod satırını ekleyin:

Protected Sub Application_Start()
    RegisterRoutes(RouteTable.Routes)
    ModelBinders.Binders.DefaultBinder = New Microsoft.Web.Mvc.DataAnnotations.DataAnnotationsModelBinder()
End Sub

Bu kod satırı, DataAnnotationsModelBinder'i tüm ASP.NET MVC uygulaması için varsayılan model bağlayıcısı olarak kaydeder.

Veri Ek Açıklama Doğrulaması Doğrulaması Özniteliklerini Kullanma

Veri Ek Açıklamaları Model Bağlayıcısı'nı kullandığınızda, doğrulama gerçekleştirmek için doğrulayıcı öznitelikleri ni kullanırsınız. System.ComponentModel.DataAnnotations ad alanı aşağıdaki doğrulayıcı öznitelikleri içerir:

  • Aralık – Bir özelliğin değerinin belirli bir değer aralığı arasında düşüp düşmediğini doğrulamanızı sağlar.
  • RegularExpression – Bir özelliğin değerinin belirli bir normal ifade deseniyle eşleşip eşleşmediğini doğrulamanızı sağlar.
  • Gerekli – Bir özelliği gerektiği gibi işaretlemenizi sağlar.
  • StringLength – Bir dize özelliği için maksimum uzunluk belirtmenizi sağlar.
  • Doğrulama – Tüm doğrulayıcı öznitelikleri için taban sınıf.

Note

Doğrulama gereksinimleriniz standart doğrulayıcılardan herhangi biri tarafından karşılanmadıysa, temel Doğrulama özniteliğinden yeni bir doğrulayıcı özniteliği devralarak her zaman özel bir doğrulayıcı özniteliği oluşturma seçeneğiniz vardır.

Listeleme 1'deki Ürün sınıfı, bu geçerliniteliklerin nasıl kullanılacağını gösterir. Ad, Açıklama ve UnitPrice özellikleri gerektiği gibi işaretlenir. Ad özelliği, 10 karakterden az bir dize uzunluğuna sahip olmalıdır. Son olarak, UnitPrice özelliği, para birimi tutarını temsil eden normal bir ifade deseniyle eşleşmelidir.

Imports System.ComponentModel
Imports System.ComponentModel.DataAnnotations

Public Class Product

    Private _id As Integer
    Private _name As String
    Private _description As String
    Private _unitPrice As Decimal

    Public Property Id() As Integer
        Get
            Return _id
        End Get
        Set(ByVal value As Integer)
            _id = value
        End Set
    End Property

     _
    Public Property Name() As String
        Get
            Return _name
        End Get
        Set(ByVal value As String)
            _name = value
        End Set
    End Property

     _
    Public Property Description() As String
        Get
            Return _description
        End Get
        Set(ByVal value As String)
            _description = value
        End Set
    End Property

     _
    Public Property UnitPrice() As Decimal
        Get
            Return _unitPrice
        End Get
        Set(ByVal value As Decimal)
            _unitPrice = value
        End Set
    End Property

End Class

İlan 1: Modeller\Product.vb

Ürün sınıfı, ek bir öznitelik olan DisplayName özniteliğinin nasıl kullanılacağını gösterir. DisplayName özniteliği, özellik bir hata iletisinde görüntülendiğinde özelliğin adını değiştirmenize olanak tanır. "UnitPrice alanı gereklidir" hata iletisini görüntülemek yerine hata iletisini görüntüleyebilirsiniz "Fiyat alanı gereklidir".

Note

Bir doğrulayıcı tarafından görüntülenen hata iletisini tamamen özelleştirmek istiyorsanız, geçerlinin ErrorMessage özelliğine şu şekilde özel bir hata iletisi atayabilirsiniz:<Required(ErrorMessage:="This field needs a value!")>

Listeleme 1'de Ürün sınıfını, Listeleme 2'dekiCreate() denetleyici eylemiyle kullanabilirsiniz. Bu denetleyici eylem, model durumu herhangi bir hata içerdiğinde Oluştur görünümünü yeniden görüntüler.

Public Class ProductController
    Inherits System.Web.Mvc.Controller

    '
    ' GET: /Product/Create

    Function Create() As ActionResult
        Return View()
    End Function

    '
    ' POST: /Product/Create

     _
    Function Create( ByVal productToCreate As Product) As ActionResult

        If Not ModelState.IsValid Then
            Return View()
        End If

        Return RedirectToAction("Index")

    End Function

End Class

Listeleme 2: Denetleyiciler\ProductController.vb

Son olarak, Create() eylemine sağ tıklayarak ve menü seçeneğini seçerek Görünüm Ekleseçeneğini seçerek Listeleme 3'te görünüm oluşturabilirsiniz. Model sınıfı olarak Ürün sınıfıyla güçlü bir şekilde yazılan bir görünüm oluşturun. Görünüm içeriği açılır listesinden Oluştur'u seçin (Bkz. Şekil 2).

Şekil 2: Create View ekleme

<%@ Page Title="" Language="VB" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage(Of MvcApplication1.Product)" %>

<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
Create
</asp:Content>

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">

    <h2>Create</h2>

    <%= Html.ValidationSummary("Create was unsuccessful. Please correct the errors and try again.") %>

    <% Using Html.BeginForm()%>

        <fieldset>
            <legend>Fields</legend>
            <p>
                <label for="Name">Name:</label>
                <%= Html.TextBox("Name") %>
                <%= Html.ValidationMessage("Name", "*") %>
            </p>
            <p>
                <label for="Description">Description:</label>
                <%= Html.TextBox("Description") %>
                <%= Html.ValidationMessage("Description", "*") %>
            </p>
            <p>
                <label for="UnitPrice">UnitPrice:</label>
                <%= Html.TextBox("UnitPrice") %>
                <%= Html.ValidationMessage("UnitPrice", "*") %>
            </p>
            <p>
                <input type="submit" value="Create" />
            </p>
        </fieldset>

    <% End Using %>

    <div>
        <%=Html.ActionLink("Back to List", "Index") %>
    </div>

</asp:Content>

Listeleme 3: Görünümler\Ürün\Create.aspx

Note

Görünüm Ekle seçeneği tarafından oluşturulan Oluştur formundan Id alanını kaldırın. Kimlik alanı bir Kimlik sütununa karşılık geldiği için, kullanıcıların bu alan için bir değer girmesine izin vermek istemezsiniz.

Bir Ürün oluşturma formunu gönderirseniz ve gerekli alanlar için değerler girmezseniz, Şekil 3'teki doğrulama hatası iletileri görüntülenir.

Şekil 3: Eksik gerekli alanlar

Geçersiz bir para birimi tutarı girerseniz, Şekil 4'teki hata iletisi görüntülenir.

Şekil 4: Geçersiz para birimi tutarı

Varlık Çerçevesi ile Veri EkAçıklama Doğrulayıcıları Kullanma

Veri modeli sınıflarınızı oluşturmak için Microsoft Entity Framework'ü kullanıyorsanız, geçerlilik özniteliklerini doğrudan sınıflarınıza uygulayamazsınız. Varlık Çerçeve Tasarımcısı model sınıflarını oluşturduğundan, model sınıflarında yaptığınız değişiklikler, Tasarımcı'da bir sonraki değişiklik yaptığınızda üzerine yazılır.

Varlık Çerçevesi tarafından oluşturulan sınıfları ile doğrulayıcıları kullanmak istiyorsanız, meta veri sınıfları oluşturmanız gerekir. Doğrulayıcıları gerçek sınıfa uygulamak yerine meta veri sınıfına uygularsınız.

Örneğin, Varlık Çerçevesi'ni kullanarak bir Film sınıfı oluşturduğunuzu düşünün (Bkz. Şekil 5). Ayrıca, Film Başlığı ve Yönetmen özellikleri gerekli özellikleri yapmak istediğinizi düşünün. Bu durumda, Listeleme 4'tekısmi sınıf ve meta veri sınıfı oluşturabilirsiniz.

Şekil 5: Entity Framework tarafından oluşturulan film sınıfı

Imports System.ComponentModel
Imports System.ComponentModel.DataAnnotations

 _
Partial Public Class Movie
End Class

Public Class MovieMetaData

    Private _title As Object
    Private _director As Object
    Private _dateReleased As Object

     _
    Public Property Title() As Object
        Get
            Return _title
        End Get
        Set(ByVal value As Object)
            _title = value
        End Set
    End Property

     _
    Public Property Director() As Object
        Get
            Return _director
        End Get
        Set(ByVal value As Object)
            _director = value
        End Set
    End Property

     _
    Public Property DateReleased() As Object
        Get
            Return _dateReleased
        End Get
        Set(ByVal value As Object)
            _dateReleased = value
        End Set
    End Property
End Class

İlan 4: Modeller\Movie.vb

Listeleme 4'teki dosya, Film ve MovieMetaData adlı iki sınıf içerir. Film sınıfı kısmi bir sınıftır. DataModel.Designer.vb dosyasında yer alan Entity Framework tarafından oluşturulan kısmi sınıfa karşılık gelir.

Şu anda,.NET çerçevesi kısmi özellikleri desteklemez. Bu nedenle, Listeleme 4'tekidosyada tanımlanan Film sınıfının özelliklerine doğrulayıcı öznitelikleri ni uygulayarak DataModel.Designer.vb dosyasında tanımlanan Film sınıfının özelliklerine doğrulayıcı özniteliklerini uygulamanın bir yolu yoktur.

Film kısmi sınıfının MovieMetaData sınıfına işaret eden bir MetadataType özniteliği ile dekore edildiğine dikkat edin. MovieMetaData sınıfı, Film sınıfının özellikleri için proxy özellikleri içerir.

Doğrulayıcı öznitelikleri MovieMetaData sınıfının özelliklerine uygulanır. Başlık, Müdür ve DateReleased özelliklerinin tümü gerekli özellikler olarak işaretlenir. Yönetmen özelliğine 5 karakterden az karakter içeren bir dize atanmalıdır. Son olarak, DisplayName özniteliği DateReleased özelliğine "Çıkış Tarihi alanı gereklidir" gibi bir hata iletisi görüntülemek için uygulanır. hata yerine "DateReleased alanı gereklidir."

Note

MovieMetaData sınıfındaki proxy özelliklerinin Film sınıfındaki ilgili özelliklerle aynı türleri temsil etmesi gerekmediğini unutmayın. Örneğin, Yönetmen özelliği Film sınıfında bir dize özelliği ve MovieMetaData sınıfında bir nesne özelliğidir.

Şekil 6'daki sayfa, Film özellikleri için geçersiz değerler girdiğinizde döndürülen hata iletilerini gösterir.

Şekil 6: Varlık Çerçevesi ile doğrulayıcılar kullanma (Tam boyutlu görüntüyü görüntülemek için tıklayınız)

Özet

Bu eğitimde, ASP.NET bir MVC uygulaması içinde doğrulama gerçekleştirmek için Veri Ek Açıklama Modeli Bağlayıcısı'ndan nasıl yararlanabileceğinizi öğrendiniz. Gerekli ve StringLength öznitelikleri gibi farklı doğrulama özniteliklerini kullanmayı öğrendiniz. Microsoft Entity Framework ile çalışırken bu öznitelikleri nasıl kullanacağınızı da öğrendiniz.