2011-11-24 29 views
6

tôi xác nhận một trường trong MVC 3 với chú thích dữ liệu:Có thể cung cấp giá trị thời gian chạy cho trình xác nhận StringLength trong MVC 3 không?

[StringLength(50, MinimumLength=5)] 
public string MyText { get; set; } 

Có cách nào để cung cấp một giá trị động đó? Một cái gì đó như thế này:

[StringLength(50, MinimumLength=GetMinimumLengthValueFromDb())] 
public string MyText { get; set; } 

Phương sách cuối cùng của tôi là sử dụng trình xác thực từ xa. Nếu tôi không tìm cách làm điều này với StringLength, tôi sẽ sử dụng RemoteValidator.

+1

Tôi muốn mở rộng lớp StringLenghtAttribute, chỉ ghi đè hàm tạo để truy xuất các giá trị mặc định từ db. – BigMike

Trả lời

7

Không, chỉ có thể cung cấp các giá trị thời gian biên dịch, như hằng số cho thuộc tính. Giới hạn này áp dụng cho tất cả các thuộc tính C# và không dành riêng cho thuộc tính chú thích dữ liệu, nhưng trong trường hợp của StringLengthAttribute ngụ ý rằng có cách để cung cấp độ dài khác nhau khi chạy.

Bạn sẽ cần phải sử dụng một loại xác thực khác hoặc có thể tạo thuộc tính tùy chỉnh kế thừa từ StringLengthAttribute chấp nhận Type và tên của phương thức trên loại đó làm nguồn cho giá trị độ dài. Cách tiếp cận này sẽ tương tự như cách được sử dụng bởi CustomValidationAttribute chấp nhận một tên là ValidatorType và một tên Method làm nguồn để xác thực.

+0

Cảm ơn. Tôi đã thực hiện xác thực theo cách bạn mô tả - được kế thừa từ StringLengthAttribute và bản địa hoá nó và thêm logic để chọn giá trị độ dài min tùy chỉnh từ DB –

+0

Cảm ơn bạn đã trỏ vào 'CustomValidationAttribute'! Tôi đã hoàn toàn quên về điều đó :-) – Oliver

+1

@ valerii.sverdlik: Có lẽ bạn có thể chia sẻ mã bạn đã sử dụng không? – Thijs

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