2

我在 MVC 3 中使用客户端、不显眼的验证。我有一个名为 MinPrice 的字段,仅装饰有 DisplayName 和 Range 属性。但它没有通过客户端验证说“需要 MinPrice 字段”。我不知道为什么,而且我绝对没有应用到任何地方的必需属性。

    [DisplayName("Asking Price")]
    [Range(0, 99999999, ErrorMessage="Invalid number")]
    public int MinPrice { get; set; }

是什么原因造成的?

(注意:我可以看到在 html 源代码中呈现的 data-val-required="The Minprice field is required" 属性,因此与新的不显眼的例程有关的事情就是把它放在那里)。我在其他领域似乎没有这个问题..

4

2 回答 2

12

仅供参考,这实际上与 Linq to SQL 无关。

[Required]MinPrice 应用了一个隐式属性int,因为根据定义,它是不可为空的(而不是可以int?为空的)。

此行为由

DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes

默认为真。

您可以通过在 Global.asax 中将其设置为 false 来禁用此行为

于 2011-03-06T22:01:10.493 回答
0

好吧,叫我白痴。

但我刚刚发现它肯定会从 LINQ 到 SQL 获得“NOT NULL”状态,这迫使它成为必填字段,即使我自己没有装饰它。所以是我自己的错,因为我在 SQL 中将其设为必填字段。

但是它似乎很愚蠢,但它不会自动带来其他验证属性,例如 varchar(100) 变为 StringLength(100) 。

无论如何,解决了我自己的问题!干杯。

于 2011-02-21T06:42:56.313 回答