2013-08-21 30 views
7

Tôi phát triển ứng dụng ASP.NET MVC4, Mã EF trước. Tôi có lớp cơ sở:Các thuộc tính DataAnnotation khác nhau cho các lớp dẫn xuất

public class Entity 
    { 
     public int Id { get; set; } 
     public string Title { get; set; } 
    } 

Và tôi có một số lớp học có nguồn gốc, ví dụ:

public class City : Entity 
{ 
    public int Population { get; set; } 
} 

Và nhiều lớp học có nguồn gốc khác (Điều, Chủ đề, xe vv). Bây giờ tôi muốn thực hiện thuộc tính "Bắt buộc" đối với thuộc tính Title trong tất cả các lớp và tôi muốn có các ErrorMessages khác nhau cho các lớp dẫn xuất khác nhau. Ví dụ: "Tiêu đề không được để trống" cho lớp Chủ đề, "Vui lòng đặt tên cho ô tô của bạn" cho hạng Ô tô, v.v. Làm cách nào tôi có thể thực hiện việc này? Cảm ơn!

Trả lời

11

Bạn có thể làm cho tài sản ảo trong lớp cơ sở:

public class Entity 
{ 
    public int Id { get; set; } 
    public virtual string Title { get; set; } 
} 

và sau đó ghi đè lên nó trong lớp trẻ, làm cho nó cần thiết và xác định các thông báo lỗi mà bạn muốn sẽ được hiển thị:

public class City : Entity 
{ 
    public int Population { get; set; } 

    [Required(ErrorMessage = "Please name your city")] 
    public override string Title 
    { 
     get { return base.Title; } 
     set { base.Title = value; } 
    } 
} 

Hoặc bạn có thể sử dụng FluentValidation.NET thay vì chú thích dữ liệu để xác định logic xác thực và trong trường hợp này bạn có thể có trình xác nhận khác nhau cho các loại bê tông khác nhau. Ví dụ:

public class CityValidator: AbstractValidator<City> 
{ 
    public CityValidator() 
    { 
     this 
      .RuleFor(x => x.Title) 
      .NotEmpty() 
      .WithMessage("Please name your city"); 
    } 
} 

public class CarValidator: AbstractValidator<Car> 
{ 
    public CityValidator() 
    { 
        this 
            .RuleFor(x => x.Title) 
            .NotEmpty() 
            .WithMessage("You should specify a name for your car"); 
    } 
} 

... 
+0

Tùy chọn ghi đè/ảo là tốt cho ứng dụng của tôi. Đây là những gì tôi cần. Cảm ơn! – ifeelgood

+0

Khi bạn định nghĩa một thuộc tính trong lớp cơ sở, nó sẽ được sử dụng bởi tất cả các lớp có nguồn gốc. – Jowen

+0

Bằng cách tạo thuộc tính ảo trong lớp cơ sở, trình xác nhận phạm vi được đánh khai báo trong lớp con. – BrainCoder

Các vấn đề liên quan