【问题标题】:How to make value type required in ASP.NET MVC validation?如何在 ASP.NET MVC 验证中设置值类型?
【发布时间】:2012-02-15 14:49:00
【问题描述】:

美好的一天!

我有一个从 JSON 请求绑定的模型,这样说:

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

和这样的控制器:

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

当我将空 JSON 对象发布到此操作 ({}) 时,isSomeFeatureEnabled=false 将有效。但我希望这个字段“必填”,因为它应该始终设置为特定值(true\false)。

我可以使这个字段可以为空并在上面加上[Required],但是根据模型逻辑,该字段并不是真正可以为空的。

intdoubleDateTime 字段的情况相同。

我使用 ASP.NET MVC 3 和默认设置:

DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes = true

它不应该适用于这种情况吗?

【问题讨论】:

    标签: asp.net-mvc validation data-annotations


    【解决方案1】:

    我认为让这个字段可以为空并使其成为Required 是目前最好的选择。正如书中所述,。否则你可以自己写一个属性,让validate方法传入value = default(T)时返回false

    【讨论】:

      【解决方案2】:

      鉴于 JSON 来自第 3 方 API 的更新,您无法影响它的形成方式;看起来可以为空是要走的路。

      【讨论】:

      • 抱歉,我的问题不是关于 UI,而是关于模型绑定/验证。正如我在我的原始问题数据中所说的那样from JSON request,空请求是{}(根本没有指定isSomeFeatureEnabled)。在这种情况下,我想强制验证。换句话说——我的 JSON 操作的消费者应该指定这个字段,即使它是 false
      • 如果您没有从 JSON 请求中获得任何信息,您是否尝试过调试 UI 以查看为什么未设置该值?我认为 UI 对于查看返回的原因和返回内容很重要。属性绑定到什么控件,例如在 UI 中?如果它绑定到一个复选框,该复选框是否已正确初始化?模型属性在发送到视图之前是否已初始化?我猜可能有几个原因,为什么您在 JSON 请求中没有得到任何回复。如果您完全无法访问或控制 UI,那么可为空可能是您唯一的选择。
      • 这是 JSON API,所以 UI 在 3rd 方应用程序/网站中。我应该在原始问题中清楚地提到这一点。看来我应该使用可为空和必需的属性。
      • 抱歉,没有意识到,这就是为什么我假设您可以修改它最初发送 JSON 的方式。在那种情况下,它看起来肯定是可以为空的。至少你有一个解决方法。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-21
      • 2023-03-26
      • 2017-05-30
      • 2015-02-26
      • 1970-01-01
      • 2018-02-01
      相关资源
      最近更新 更多