Как сделать тип значения обязательным при проверке ASP.NET MVC? - PullRequest
4 голосов
/ 15 февраля 2012

Добрый день!

У меня есть модель, которая связана с запросом JSON, скажем так:

public class MyModel
{
     public bool isSomeFeatureEnabled { get; set; }
}

И контроллер вот так:

public ActionResult Submit(MyModel request)
{   
    if (ModelState.IsValid)
    {
        ..
    }
    else
    {
        ..
    }
}

Когда я опубликую пустой объект JSON для этого действия ({}), оно будет действительным с isSomeFeatureEnabled=false.Но я хочу, чтобы это поле было «обязательным» с точки зрения того, что оно должно быть всегда установлено в определенном значении (true \ false).

Я могу сделать это поле обнуляемым и поставить [Required], но поле не являетсядействительно обнуляемый для каждой модели логики.

Та же история с полями int, double и DateTime.

Я использую ASP.NET MVC 3 и по умолчанию:

DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes = true

Разве это не должно работать в этой ситуации?

Ответы [ 2 ]

2 голосов
/ 15 февраля 2012

Я думаю, что сделать это поле обнуляемым, а также сделать его Required - лучший выстрел на данный момент.Как говорится в книге, .В противном случае вы можете написать свой собственный атрибут, заставить метод validate возвращать false при передаче в value = default(T)

2 голосов
/ 15 февраля 2012

Учитывая обновление, что JSON исходит от стороннего API, и вы не имеете никакого влияния на его формирование;похоже, что nullable - это то, что нужно.

...