2012-02-21 64 views
6

Tôi đang sử dụng tính năng xác thực thuộc tính trong dự án của mình.Làm thế nào để thiết lập/loại bỏ các thuộc tính động trong C#?

[Required(ErrorMessage = "DepartmentCode is Required")] 
public string DepartmentCode { get; set; } 

Trong một số trường hợp, không cần mã vùng. Làm cách nào tôi có thể bỏ qua xác thực trong trường hợp của tôi?

+0

Nếu không bắt buộc trong một số trường hợp, tại sao bạn đặt thuộc tính? Các thuộc tính là tĩnh, tại sao không tạo ra một thuộc tính hoặc một cái gì đó như thế? –

+1

Trong mã của bạn, nó có thể được gọi là * departmant *, nhưng thông báo lỗi của bạn chắc chắn nên gọi là * bộ phận *. – spender

+0

@ H.B. Trong thực tế, doanh nghiệp của tôi đã thay đổi trong một trường hợp .... Trong trường hợp khác, tài sản này là bắt buộc ... –

Trả lời

0

Tôi sẽ loại bỏ RequiredAttribute khỏi mô hình của bạn và kiểm tra nó khi bạn đã nhấn bộ điều khiển của mình và kiểm tra nó với bất kỳ điều gì khiến nó không được yêu cầu.

Nếu nó rơi vào trường hợp nó là cần thiết và giá trị không được điền vào, thêm lỗi cho ModelState tay

ModelState.AddModelError("DepartmantCode", "DepartmantCode is Required");

Bạn chỉ sẽ mất xác trên các mặt hàng theo cách này

1

Hãy xem tại địa chỉ: Remove C# attribute of a property dynamically

Dù sao tôi nghĩ rằng giải pháp thích hợp là kế thừa một thuộc tính từ RequiredAttribute và ghi đè lênPhương pháp 210 (để bạn có thể kiểm tra khi trường đó là bắt buộc hay không). Bạn có thể kiểm tra CompareAttribute triển khai nếu bạn muốn giữ cho xác thực phía máy khách hoạt động.

0

Tôi đã có vòng vấn đề này trong mô hình, trong một số trường hợp nó không phải là lý tưởng, nhưng đó là cách rẻ nhất và nhanh nhất.

public string NonMandatoryDepartmentCode 
{ 
    get 
    { 
     return DepartmentCode; 
    } 
    set 
    { 
     DepartmentCode = value; 
    } 
} 

Tôi đã sử dụng phương pháp này cho MVC khi mô hình cơ sở tôi kế thừa các thuộc tính chứa tôi muốn ghi đè.

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