2010-03-13 32 views
7

đối tượng của tôi có trường với kiểu dữ liệu int. khi tôi đặt dưới dạng html trong hộp văn bản này không phải số, người xác nhận nói - Trường phải là một số. làm thế nào tôi có thể thay đổi các thông điệp này như thế nàythay đổi xác thực thư trong chú thích dữ liệu

[Required(ErrorMessage = "Введите название")] 
    [DisplayName("Название")] 
    public int age { get; set; } 
+0

Bất kỳ lý do nào khiến câu hỏi này đã bị giảm giá? Xin vui lòng để lại một bình luận khi downvoting một câu hỏi. IMHO nó là một câu hỏi hay. –

+0

Không phải ai cũng hiểu tiếng Nga. văn bản thuộc tính phải bằng tiếng Anh. –

Trả lời

4

tôi đã không tìm thấy một sạch cách để đạt được điều này sử dụng dữ liệu Chú thích. Một cách sẽ là viết một mô hình tùy chỉnh chất kết dính nhưng điều này có vẻ như rất nhiều công việc để làm cho một nhiệm vụ đơn giản như vậy.

Cách khác để đạt được điều này là thêm một thư mục App_GlobalResources vào ứng dụng ASP.NET của bạn. Thêm tệp tài nguyên có tên là Messages.resx chứa tài nguyên chuỗi PropertyValueRequired.

PropertyValueRequired = "Some custom error message" 

Trong Application_Start đăng ký khóa lớp tài nguyên của bạn:

protected void Application_Start() 
{ 
    RegisterRoutes(RouteTable.Routes); 
    DefaultModelBinder.ResourceClassKey = "Messages"; 
} 

Lưu ý rằng ASP.NET MVC 2 sử dụng phím nguồn PropertyValueInvalid thay vì PropertyValueRequired.

IMO sử dụng Chú thích dữ liệu để thực hiện logic xác thực bị giới hạn (có thể trong .NET 4 điều này sẽ thay đổi). Nếu bạn muốn có toàn quyền kiểm soát logic xác nhận, tôi khuyên bạn nên sử dụng thư viện xác nhận như Fluent Validation hoặc xVal.

+0

Tôi đã có chính xác cùng một vấn đề. Tôi cũng đã chuyển từ chú thích dữ liệu sang Xác thực thông thạo. Tôi thấy Xác thực thông thạo thực sự hữu ích và dễ dàng tùy chỉnh. –

+0

Bất kỳ lý do nào bạn đề nghị Fluentvalidation? Nó có tốt hơn khối ứng dụng Enterprise Library Validation không? BTW, xVal hiện không được chấp nhận. –

+0

Tôi khuyên bạn nên sử dụng FV vì nó nhẹ, cho phép diễn tả các quy tắc xác thực phức tạp một cách thanh lịch, nó cung cấp API để dễ dàng kiểm tra các quy tắc xác thực đó và tích hợp tuyệt vời với ASP.NET MVC. –

2

Tôi đã gặp phải vấn đề tương tự và làm việc xung quanh nó bằng cách chỉ định RegularExpression chỉ cho phép các số tự nhiên dương.

[Required(ErrorMessage = "Введите название")] 
[DisplayName("Название")] 
[RegularExpression(@"^[0-9]+$", ErrorMessage = "Поле возраст не является числом")] 
public int age { get; set; } 

Không chắc chắn nếu có bất kỳ sự thiếu hụt nào đối với giải pháp này. Nó có vẻ tốt cho tôi.

PS: Nếu bạn không muốn cho phép số 0 hàng đầu sử dụng "^[1-9]+[0-9]*$".

Nhìn lại: tôi phải thừa nhận rằng có một chút lạ lùng khi thêm biểu thức chính quy vào một số nguyên.

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