Asp.net mvc 如何在ASP.NET MVC验证中设置所需的值类型?

Asp.net mvc 如何在ASP.NET MVC验证中设置所需的值类型?,asp.net-mvc,validation,data-annotations,Asp.net Mvc,Validation,Data Annotations,你好 我有一个从JSON请求绑定的模型,如下所示: public class MyModel { public bool isSomeFeatureEnabled { get; set; } } public ActionResult Submit(MyModel request) { if (ModelState.IsValid) { .. } else { .. } } 像这样的控制器: pu

你好

我有一个从JSON请求绑定的模型,如下所示:

public class MyModel
{
     public bool isSomeFeatureEnabled { get; set; }
}
public ActionResult Submit(MyModel request)
{   
    if (ModelState.IsValid)
    {
        ..
    }
    else
    {
        ..
    }
}
像这样的控制器:

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

在这种情况下,它不应该工作吗?

鉴于JSON来自第三方API的更新,您对它的形成方式没有任何影响;看起来可以为空是最好的选择。

我认为让这个字段为空,同时让它成为
必需的
是目前最好的选择。正如书中所说。否则,您可以编写自己的属性,当传入
value=default(T)

对不起,我的问题不是关于UI,而是关于模型绑定/验证。正如我在原始问题中所述,数据是来自JSON请求的
,空请求是
{}
isSomeFeatureEnabled
根本没有指定)。我想在这种情况下强制验证。换句话说——我的JSON操作的使用者应该指定这个字段,即使它是
false
。如果您没有从JSON请求中得到任何东西,您是否尝试过调试UI以了解为什么没有设置该值?我认为用户界面很重要,可以查看返回的原因和内容。属性绑定到什么控件(例如在UI中)?如果绑定到复选框,复选框是否正确初始化?模型属性在发送到视图之前是否已初始化?我想可能是一些原因导致您无法从JSON请求中获得任何信息。如果您对UI完全没有访问权或控制权,那么可以为null可能是您唯一的选择。这是JSON API,所以UI位于第三方应用程序/网站中。我应该在原来的问题中清楚地提到这一点。看来我应该使用nullable和Required属性。对不起,我没有意识到,这就是为什么我假设您可以修改它最初发送JSON的方式。在这种情况下,它看起来当然是可以为null的。至少你有一个解决办法。