7

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).

4

3 に答える 3

15

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.

于 2012-12-27T15:30:45.713 に答える
0

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.

于 2012-09-26T17:58:35.480 に答える
0

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

DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes = false;
于 2014-03-27T19:49:51.780 に答える