2012-02-21 75 views
6

我在我的項目中使用屬性驗證。如何在c#中動態設置/刪除屬性?

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

在某些情況下,DepartmentCode不是必需的。我如何動態地忽略我的情況下的驗證?

+0

如果在某些情況下不需要,爲什麼要設置屬性?屬性是靜態的,爲什麼不創建一個屬性或類似的東西? – 2012-02-21 15:38:56

+1

在你的代碼中它可能被稱爲* departmant *,但是你的錯誤信息應該明確地稱它爲* department *。 – spender 2012-02-21 15:44:24

+0

@ H.B.事實上,我的業務在一個案例中發生了變化......在另一種情況下,此屬性是必需的 – 2012-02-21 15:44:27

回答

0

我會從您的模型中刪除RequiredAttribute,並在您擊中控制器後檢查它,並檢查它是否違反任何原因。

如果它落入其中要求的情況下,和值沒有填寫,錯誤添加到ModelState中手動

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

你只失去在客戶端這樣的驗證

1

看看:Remove C# attribute of a property dynamically

無論如何,我認爲正確的解決方案是從RequiredAttribute繼承屬性和覆蓋Validate()方法(所以你可以檢查該字段是否需要)。如果您想保持客戶端驗證正常工作,您可以檢查CompareAttribute實現。

0

我得輪這個問題在模型中,在某些情況下,這是不理想,但它是最便宜,最快捷的方式。

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

當我繼承的基礎模型包含我想覆蓋的屬性時,我對MVC使用了這種方法。