2012-09-26 39 views
5

的我怎么能避免HTML属性“数据-VAL-日期”从日期时间属性创建元素的产生?ASP.NET MVC 4避免产生数据-VAL-日期日期时间

型号:

public class RegisterModel 
{ 
    [Required] 
    [Display(Name = "Date of birth")] 
    public DateTime? DateOfBirth { get; set; } 
} 

的观点:

@Html.LabelFor(m => m.DateOfBirth) 
@Html.EditorFor(m => m.DateOfBirth) 

其实,我创建了三个下拉列表元素选择出生日期,这不给值以日期格式显示。 我见过的一些解决方案包含在解决方法中:使用javascript取消验证。 我设想的解决方案是将DateTime属性分为每个值(日,月,年)的三个长时间属性。

回答

0

数据-VAL-日期用于通过验证系统来验证的日期。如果删除它,客户端验证将不起作用。

如果这是你想要的东西,那么就禁用客户端验证。

+0

好感谢您的快速答复。禁用客户端验证会影响每个元素? 在我身边,我选择了一个包含我的三个值并替换日期时间的新对象。 – bado

+0

@bado - 对不起,我不明白你的意思。 –

+0

我必须精确,我只是从网络技术开始。我的意思是,如果我禁用客户端验证,所有data-val(表单上的所有元素)都不起作用? – bado

12

好吧,这花了我工作的一个下午......显然mvc4决定,这是时间上的视图模型EVERY日期时间属性渲染数据-VAL-日期=“消息”。我试图修改这个默认行为,但没有成功。

这解决了我的问题:

$.validator.addMethod('date', 
    function (value, element) { 
     return true; // since MVC4 data-val-date is put on EVERY vm date property. Default implementation does not allow for multiple cultures... 
    }); 

您也可以尝试写在你的共享文件夹EditorFor名为“DateTime.cshtml”你自己编辑模板,但不要用TextBoxFor那里,因为那是一个也受到污染。

+0

我更喜欢这种解决方案,因为它只能解决问题的原因。客户端验证提供了更好的用户体验,并减少了后台服务器的数量,因此应该避免禁用整个事件。 –

+0

仍然有用+ 1ed – user2695433

0

这在Global.asax文件添加到您的应用程序启动和形式应该火。

DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes = false;