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

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, bir 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. Başvuru Ekle Project 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).

Image of browse tab

Ş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 void Application_Start()
{
    RegisterRoutes(RouteTable.Routes);
    ModelBinders.Binders.DefaultBinder = new Microsoft.Web.Mvc.DataAnnotations.DataAnnotationsModelBinder();
}

Bu kod satırı, ASP.NET MVC uygulamasının tamamı için ataAnnotationsModelBinder'ı 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.

using System.ComponentModel;
using System.ComponentModel.DataAnnotations;

namespace MvcApplication1.Models
{
    
    public class Product
    {
        public int Id { get; set; }

        [Required]
        [StringLength(10)]
        public string Name { get; set; }

        [Required]
        public string Description { get; set; }

        [DisplayName("Price")]
        [RegularExpression(@"^\$?\d+(\.(\d{2}))?$")]
        public decimal UnitPrice { get; set; }
    }
}

Liste 1: Models\Product.cs

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

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.

using System.Web.Mvc;
using MvcApplication1.Models;

namespace MvcApplication1.Controllers
{
    public class ProductController : Controller
    {
         //
        // GET: /Product/Create

        public ActionResult Create()
        {
            return View();
        } 

        //
        // POST: /Product/Create

        [AcceptVerbs(HttpVerbs.Post)]
        public ActionResult Create([Bind(Exclude="Id")]Product productToCreate)
        {
            if (!ModelState.IsValid)
                return View();

            // TODO: Add insert logic here
            return RedirectToAction("Index");
        }

    }
}

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

Image of add view dialog box

Şekil 2: Oluşturma Görünümü Ekleme

<%@ Page Title="" Language="C#" MasterPageFile="Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<MvcApplication1.Models.Product>" %>

<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">Price:</label>
                <%= Html.TextBox("UnitPrice") %>
                <%= Html.ValidationMessage("UnitPrice", "*") %>
            </p>
            <p>
                <input type="submit" value="Create" />
            </p>
        </fieldset>

    <% } %>

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

Image of all validation errors

Şekil 3: Gerekli alanlar eksik

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

Image of invalid currency validation error

Ş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 Designer model sınıflarını oluşturduğundan, tasarımcıda bir sonraki değişiklik yaptığınızda 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 hale getirmek istediğinizi de Imagine. Bu durumda , Liste 4'te kısmi sınıf ve meta veri sınıfı oluşturabilirsiniz.

Image of movie class

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

using System.ComponentModel;
using System.ComponentModel.DataAnnotations;

namespace MvcApplication1.Models
{
    [MetadataType(typeof(MovieMetaData))]
    public partial class Movie
    {
    }

    public class MovieMetaData
    {
        [Required]
        public object Title { get; set; }

        [Required]
        [StringLength(5)]
        public object Director { get; set; }

        [DisplayName("Date Released")]
        [Required]
        public object DateReleased { get; set; }
    }

}

Listeleme 4: Models\Movie.cs

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.Designer.vb dosyasında bulunan Entity Framework tarafından oluşturulan kısmi sınıfa karşılık gelir.

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

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ın Tarihi 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.

Image of error message for invalid movie values

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