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 Açıklama Modeli Bağlayıcısını Kullanma

Veri Ek Açıklamaları Model Bağlayıcısı'nı bir ASP.NET MVC uygulamasında 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).

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

Bu kod satırı, ataAnnotationsModelBinder'ı 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 : Dize özelliği için en fazla uzunluğu belirtmenizi sağlar.
  • Doğrulama : 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ği 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 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. "BirimFiyat 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() denetleyicisi 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 türlenmiş bir görünüm oluşturun. İçerik görüntüleme açılan listesinden Oluştur'u seçin (bkz . Şekil 2).

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

Şekil 2: Görünüm Oluştur'u 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 olduğundan, 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 hatalarının 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 doğrulama hatasının görüntüsü

Şekil 4: Geçersiz para birimi tutarı

Entity Framework ile Veri Ek Açıklaması Doğrulayıcılarını 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.

Doğrulayıcıları Entity Framework tarafından oluşturulan sınıflarla 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ı görüntüsü

Ş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; }
    }

}

Liste 4: Models\Movie.cs

Liste 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'de bulunan 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 bir yolu yoktur. Tasarım Aracı.vb dosyasını, Liste 4'te dosyada tanımlanan Movie sınıfının özelliklerine doğrulayıcı öznitelikleri uygulayarak.

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

Geçersiz film değerleri için 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.