2016-11-04 49 views
0

使用數據註釋屬性驗證string屬性時,是否有人知道驗證字符串的方法是一組可能的值之一,可能表示爲數組或分隔字符串?數據註釋以檢查是否在一組數值內

這個問題是更通用的,但我遇到的具體實例是一個屬性,可以包含一個HTTP方法的子集;具體地,GET,POSTPUT,PATCHDELETE

System.ComponentModel.DataAnnotations命名空間中,我看到RegularExpressionAttribute,我可能會將其子類化並動態創建RegEx,但是想知道是否缺少已存在的內容。

答案不限於.NET框架。第三方庫甚至自定義代碼都可以接受,但更接近標準(在這種情況下意味着採用)越好。

感謝

+1

請注意數據註釋是*註釋*。他們本身並不確認任何事情。您仍然需要實際遵守註釋才能發生的代碼。這適用於任何不屬性設置器實際驗證傳入值的解決方案。 –

+1

如果'RegularExpressionAttribute'不符合您的需求,您可以創建自定義驗證屬性來實現'IClientVaidatable',它將爲您提供客戶端和服務器端驗證[完整的ASP.NET MVC 3驗證指南 - 第2部分]( http://www.devtrends.co.uk/blog/the-complete-guide-to-validation-in-asp.net-mvc-3-part-2) –

+0

@StephenMuecke - 看到我的自我回答。如果您將評論更改爲答案,我會接受它。 –

回答

0

看起來像繼承RegularExpressionAttribute是Steven Muecke在評論中表示的從頭開始構建自己的路線。

作爲一個方面說明,我最終重構了其他原因,不再需要註釋。但是,當我遇到沒有明顯而直接的解決方案的問題時,情況往往如此。

0

您可以使用Remote Validation用於此目的:

[System.Web.Mvc.Remote("Check", "yourModel", 
         HttpMethod = "POST", 
         ErrorMessage = "Username is not available.")] 
public string Name { set; get; } 

和:

public ActionResult Check(string name) 
{ 
    string[] names = {"name1", "name2", "name3"};//set of possible values 

    //validate the string is one of a set of possible values 
    if (names.Contains(name.ToLowerInvariant())) return Json(false); 
    //... 
    return Json(true); 
} 

您也可以使用AdditionalFields來獲取或設置所需要的驗證附加字段。 AdditionalFields屬性是字符串屬性,可以爲多個字段提供。