我在我的項目中使用屬性驗證。如何在c#中動態設置/刪除屬性?
[Required(ErrorMessage = "DepartmentCode is Required")]
public string DepartmentCode { get; set; }
在某些情況下,DepartmentCode不是必需的。我如何動態地忽略我的情況下的驗證?
我在我的項目中使用屬性驗證。如何在c#中動態設置/刪除屬性?
[Required(ErrorMessage = "DepartmentCode is Required")]
public string DepartmentCode { get; set; }
在某些情況下,DepartmentCode不是必需的。我如何動態地忽略我的情況下的驗證?
我會從您的模型中刪除RequiredAttribute,並在您擊中控制器後檢查它,並檢查它是否違反任何原因。
如果它落入其中要求的情況下,和值沒有填寫,錯誤添加到ModelState中手動
ModelState.AddModelError("DepartmantCode", "DepartmantCode is Required");
你只失去在客戶端這樣的驗證
看看:Remove C# attribute of a property dynamically
無論如何,我認爲正確的解決方案是從RequiredAttribute
繼承屬性和覆蓋Validate()
方法(所以你可以檢查該字段是否需要)。如果您想保持客戶端驗證正常工作,您可以檢查CompareAttribute
實現。
而不是動態添加和刪除驗證,您最好創建一個更好地滿足此目的的屬性。
下面的文章說明了這一點(MVC3與客戶端驗證太): http://blogs.msdn.com/b/simonince/archive/2011/02/04/conditional-validation-in-asp-net-mvc-3.aspx
我得輪這個問題在模型中,在某些情況下,這是不理想,但它是最便宜,最快捷的方式。
public string NonMandatoryDepartmentCode
{
get
{
return DepartmentCode;
}
set
{
DepartmentCode = value;
}
}
當我繼承的基礎模型包含我想覆蓋的屬性時,我對MVC使用了這種方法。
如果在某些情況下不需要,爲什麼要設置屬性?屬性是靜態的,爲什麼不創建一個屬性或類似的東西? – 2012-02-21 15:38:56
在你的代碼中它可能被稱爲* departmant *,但是你的錯誤信息應該明確地稱它爲* department *。 – spender 2012-02-21 15:44:24
@ H.B.事實上,我的業務在一個案例中發生了變化......在另一種情況下,此屬性是必需的 – 2012-02-21 15:44:27