1

我正在使用 ASP.NET MVC 3 + FLUENT VALIDATION + NINJECT

我有模型 X,该模型的规则是这样的:

RuleFor(c => c.FirstName).NotEmpty();
RuleFor(c => c.LastName).NotEmpty();

我发现了一件奇怪的事情,引擎将验证属性放在所有隐藏元素和下拉菜单、单选按钮等上,我没有在该模型的验证配置中指定这一点,所以我猜是默认情况下。 ..

<input type="hidden" value="1" name="Id" id="Id" data-val-required="&amp;#39;Id&amp;#39; must not be empty." data-val-number="The field Id must be a number." data-val="true">

验证有效,因为隐藏元素总是有一个值,但我对单选按钮有疑问。例如,如果我不希望一个单选按钮在默认情况下始终被选中但为空,并且如果我想在该项目上放置验证规则,则渲染会将默认验证属性放在我的规则之上,所以它会变得一团糟并且验证无法正常工作...

任何人都有类似的问题或知道这一点,还是我必须拉 ASP.NET MVC 源并自己查找?:)

半懒惰和按截止日期很少下推的编码器

编辑

我尝试了从这个链接提出的解决方案:

流利的验证。错误:不显眼的客户端验证规则中的验证类型名称必须是唯一的

但是无论 AddImplicitRequiredAttribute 设置如何,asp.net mvc 都会在每个字段上发出必需的属性...

4

1 回答 1

6

将视图模型上的属性设为Id可为空的整数。

所以而不是:

public int Id { get; set; }

你应该使用:

public int? Id { get; set; }

对于您不想被要求的任何其他值类型也是如此。您应该使用可为空的类型。

Html 助手会自动data-val为所有不可为空的类型发出属性,这是设计使然,如果您不希望这种行为,则必须编写自己的自定义 HTML 助手来生成输入字段和下拉列表。您不能再依赖 TextBoxFor 和 DropDownListFor 助手,因为它们就是这样设计的。

于 2011-11-04T16:11:16.003 回答