问题描述:

how can I avoid the generation of the html attribute "data-val-date" for the element created from a Datetime property?

The model:

public class RegisterModel

{

[Required]

[Display(Name = "Date of birth")]

public DateTime? DateOfBirth { get; set; }

}

The view:

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

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

In fact, I'm creating a three drop down lists element for selecting the date of birth, which don't give a value in a date format.

Some solutions I've seen, consisted in a work around: removing the validation with a javascript.

The solution I envisage is to split the DateTime property into three long one for each value (day, month, year).

网友答案:

data-val-date is used by the validation system to validate the date. If you remove it, client-side validation won't work.

If that's what you want, then just disable client-side validation.

网友答案:

Ok, this took me an afternoon of work... apparently mvc4 decided that it was time to render a data-val-date="Message" on EVERY datetime property on the viewmodel. I've tried to modify this default behaviour but didn't succeed.

This solved my problems:

$.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...
    });

You can also try to write your own editor template named "DateTime.cshtml" in your shared EditorFor folder, but don't use TextBoxFor there, because that one is polluted as well.

网友答案:

Add this to your application start in your global.asax file and the form should fire.

DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes = false;
相关阅读:
Top