2016-11-04 2 views
0

При проверке свойств string с атрибутами аннотации данных кто-нибудь знает способ проверки строки - это один из множества возможных значений, возможно, выраженный в виде массива или разделительной строки?Аннотации данных для проверки, если в пределах набора значений

Вопрос более общий, но конкретный экземпляр, с которым я столкнулся, имеет свойство, которое может содержать подмножество методов HTTP; в частности, GET, POST, PUT, PATCH и DELETE.

В пространстве имен System.ComponentModel.DataAnnotations я вижу RegularExpressionAttribute, что я могу потенциально подклассифицировать это и динамически создать RegEx, но задаюсь вопросом, отсутствует ли я что-то, что уже существует.

Ответ не ограничивается .NET framework. Сторонние библиотеки и даже пользовательский код являются приемлемыми, но чем ближе к стандарту (то есть в этом случае, хорошо принят), тем лучше.

Благодаря

+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 - это маршрут, который нужно предпринять, или создать собственный с нуля, как сказал Стивен Мюекке в комментарии.

В качестве побочного примечания я в конечном счете реорганизован по другим причинам и больше не нуждаюсь в аннотации. Но это часто бывает, когда я сталкиваюсь с проблемами, которые не имеют очевидных и простых решений.

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 является строковым свойством и может быть предоставлено для нескольких полей.

Смежные вопросы