0

我有3名自定义的下拉列表中为DateTime模特属性,分别代表日/月/年即设定每个值一个隐藏的输入,用也可以正常工作的自定义模型绑定器ASP.NET MVC获取的DateTime的月/日/年的属性继承属性验证

我也创建了一个RequiredIf验证属性与客户端验证,并且它工作正常服务器和客户端添加相应的data-val-requiredif属性到隐藏的输入,其中存储选定的DropDown值。

问题是当我用使用自定义控制的DateTime属性与此RequiredIf属性。

[RequiredIf(...)] 
public DateTime Start { get; set; } 

和问题与Html.HiddenFor生成的每个下拉隐藏的输入(在本示例绑定到Start.Month):

<input data-val="true" data-val-number="The field Month must be a number." id="Start_Month" name="Start.Month" type="hidden" value=""> 

的问题是很清楚的,验证属性是在DateTime属性,不是Month子属性,因此data-val-requiredif...验证属性未在该输入上设置。

问题

是什么力量让Day/Month/Year继承dataannotation属性验证,从它的DateTime模型最好的方法?

+1

我不认为有办法做你所问的。使用标准MVC验证无法将3个不同的字段映射到单个数据验证。你应该做的不是使用自定义模型联编程序,而是将每个字段验证为单独的int,然后将它们组合成服务器上的日期(如果一切都通过)。 –

+0

@ErikFunkenbusch你说得对,我认为我推翻了这个并且失明了,你可能是一种更简单的方法。 –

回答

-1

我不会用数据属性名多连字符喜欢你的“数据-VAL-数”。我也遇到了大写问题,因此在数据之后总是使用一个连字符,并且总是使用小写字母。

如果你传递追溯到建立独立的控制器(即月/日/年),你必须把它补好datetime格式的服务器上验证工作。

如果你把日期一起在一个JSON模型传回给控制器,MVC将JSON转换成一个模型对象为您服务。确保您的JSON模型与控制器参数期望的完全相同。

+0

恐怕那不是重点,我的绑定工作正常,问题必须是Day属性继承Start父项的数据属性。 PD:你提到的“data-val”是microsoft.unobtrusive.validation设置的东西,它工作得很好 –

+0

反对票?真? – DJTN