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

Microsoft tarafından

ASP.NET MVC uygulamasında doğrulama gerçekleştirmek için Veri Ek Açıklama Modeli Bağlayıcısı'nın avantajlarından yararlanın. Microsoft Entity Framework'te farklı türde doğrulayıcı öznitelikleri kullanmayı ve bunlarla çalışmayı öğrenin.

Bu öğreticide, ASP.NET MVC uygulamasında doğrulama gerçekleştirmek için Veri Ek Açıklaması doğrulayıcılarını kullanmayı öğreneceksiniz. Veri Ek Açıklaması doğrulayıcılarını kullanmanın avantajı, bir sınıf özelliğine yalnızca Required veya StringLength özniteliği gibi bir veya daha fazla öznitelik ekleyerek doğrulama gerçekleştirmenizi sağlamasıdır.

Veri Ek Açıklamaları Model 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ı Model Bağlayıcısı için resmi ürün desteği sunmaz.

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

Bir ASP.NET MVC uygulamasında Veri Ek Açıklamaları Model Bağlayıcısı'nı kullanmak için önce Microsoft.Web.Mvc.DataAnnotations.dll derlemesine ve System.ComponentModel.DataAnnotations.dll derlemesine bir başvuru eklemeniz gerekir. Proje, Başvuru Ekle menü seçeneğini belirleyin. Ardından Gözat sekmesine tıklayın ve Veri Ek Açıklamaları Model Bağlayıcısı örneğini indirdiğiniz (ve sıkıştırmasını kaldırdığınız) konuma göz atın (bkz . Şekil 1).

Başvuru ekle iletişim kutusunun resmi

Ş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)

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

.NET Framework Service Pack 1'de bulunan System.ComponentModel.DataAnnotations.dll derlemesini Veri Ek Açıklamaları Model Bağlayıcısı ile kullanamazsınız. Veri Ek Açıklamaları Model Bağlayıcı Örneği indirmesine dahil edilen System.ComponentModel.DataAnnotations.dll derlemesinin sürümünü kullanmanız gerekir.

Son olarak, DataAnnotations Model Binder'ı Global.asax dosyasına kaydetmeniz gerekir. Application_Start() yönteminin aşağıdaki gibi görünmesi için Application_Start() 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'ı ASP.NET MVC uygulamasının tamamı için varsayılan model bağlayıcısı olarak kaydeder.

Veri Ek Açıklaması Doğrulayıcı Ö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ı özniteliklerini kullanırsınız. System.ComponentModel.DataAnnotations ad alanı aşağıdaki doğrulayıcı özniteliklerini içerir:

  • Range: Bir özelliğin değerinin belirtilen değer aralığı arasında olup olmadığını doğrulamanızı sağlar.
  • RegularExpression : Bir özelliğin değerinin belirtilen normal ifade deseni ile 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.
  • Validation: Tüm doğrulayıcı öznitelikleri için temel sınıf.

Not

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

Liste 1'deki Product sınıfı, bu doğrulayıcı özniteliklerinin nasıl kullanılacağını gösterir. Name, Description ve UnitPrice özellikleri gerekli olarak işaretlenir. Name özelliğinin 10 karakterden kısa bir dize uzunluğu olmalıdır. Son olarak, UnitPrice özelliğinin bir para birimi tutarını temsil eden normal ifade deseni ile eşleşmesi gerekir.

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

Liste 1: Models\Product.vb

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

Not

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

Liste 1'deki Product sınıfını , Liste2'deki Create() denetleyici eylemiyle kullanabilirsiniz. Bu denetleyici eylemi, 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

Liste 2: Controllers\ProductController.vb

Son olarak, Create() eylemine sağ tıklayıp Görünüm Ekle menü seçeneğini belirleyerek Liste 3'te görünümü oluşturabilirsiniz. Model sınıfı olarak Product sınıfıyla kesin olarak belirlenmiş bir görünüm oluşturun. görünüm içeriği açılan listesinden Oluştur'u seçin (bkz . Şekil 2).

Görünüm ekle iletişim kutusunun resmi

Şekil 2: Oluşturma Görünümü 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>

Liste 3: Views\Product\Create.aspx

Not

Görünüm Ekle menü seçeneği tarafından oluşturulan Oluştur formundan Kimlik 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.

Ürün oluşturmak için formu gönderirseniz ve gerekli alanlar için değer girmezseniz, Şekil 3'teki doğrulama hata iletileri görüntülenir.

Tüm doğrulama hata iletilerinin görüntüsü

Şekil 3: Gerekli alanlar eksik

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

Geçersiz para birimi hata iletisinin görüntüsü

Şekil 4: Geçersiz para birimi tutarı

Entity Framework ile Veri Ek Açıklaması Doğrulayıcıları Kullanma

Veri modeli sınıflarınızı oluşturmak için Microsoft Entity Framework kullanıyorsanız, doğrulayıcı özniteliklerini doğrudan sınıflarınıza uygulayamazsınız. Entity Framework Tasarım Aracı model sınıflarını oluşturduğundan, Tasarım Aracı bir sonraki değişikliğinizde model sınıflarında yaptığınız tüm değişikliklerin üzerine yazılır.

Entity Framework tarafından oluşturulan sınıflarla 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 doğrulayıcıları uygularsınız.

Örneğin, Entity Framework kullanarak bir Movie sınıfı oluşturduğunuzu düşünün (bkz . Şekil 5). Ayrıca, Film Başlığı ve Yönetmen özelliklerini gerekli özellikler haline getirmek istediğinizi de düşünün. Bu durumda , Liste 4'te kısmi sınıf ve meta veri sınıfı oluşturabilirsiniz.

Film sınıfının görüntüsü

Ş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

Liste 4: Models\Movie.vb

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

Şu anda .NET framework kısmi özellikleri desteklememektedir. Bu nedenle, doğrulayıcı özniteliklerini DataModel'de tanımlanan Movie sınıfının özelliklerine uygulamanın hiçbir yolu yoktur. Liste 4'teki dosyada tanımlanan Movie sınıfının özelliklerine doğrulayıcı özniteliklerini uygulayarak Tasarım Aracı.vb dosyası.

Movie kısmi sınıfının MovieMetaData sınıfını işaret eden bir MetadataType özniteliğiyle donatıldığını unutmayın. MovieMetaData sınıfı, Movie 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. Title, Director ve DateReleased özelliklerinin tümü gerekli özellikler olarak işaretlenir. Director özelliğine 5'ten az karakter içeren bir dize atanmalıdır. Son olarak, DisplayName özniteliği DateReleased özelliğine uygulanır ve "DateReleased alanı gereklidir" hatası yerine "Yayımlanan Tarih alanı gereklidir" gibi bir hata iletisi görüntülenir.

Not

MovieMetaData sınıfındaki proxy özelliklerinin Movie sınıfındaki ilgili özelliklerle aynı türleri temsil etmek zorunda olmadığını fark edin. Örneğin, Director özelliği Movie sınıfındaki bir dize özelliği ve MovieMetaData sınıfındaki 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.

Geçersiz film değerleri hata iletisinin görüntüsü

Şekil 6: Entity Framework ile doğrulayıcıları kullanma (Tam boyutlu görüntüyü görüntülemek için tıklayın)

Özet

Bu öğreticide, bir ASP.NET MVC uygulamasında doğrulama gerçekleştirmek için Veri Ek Açıklama Modeli Bağlayıcısı'nın avantajlarından nasıl yararlanabileceğinizi öğrendiniz. Required ve StringLength öznitelikleri gibi farklı türde doğrulayıcı öznitelikleri kullanmayı öğrendinsiniz. Ayrıca Microsoft Entity Framework ile çalışırken bu özniteliklerin nasıl kullanılacağını da öğrendinsiniz.