8

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

3 Answers 3

16

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.

Sign up to request clarification or add additional context in comments.

2 Comments

I prefer this solution because it only disables the cause of the problem. Client side validation provides a better user experience and reduces post-backs to your server, so disabling the whole thing should be avoided.
still useful +1ed
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.

4 Comments

Okay thanks for your quick answer. Disabling the client-side validation will have effect on every elements? In my side, I opt for a new object containing my three values and replacing the datetime.
@bado - i'm sorry, I don't understand what you mean.
I have to precise, I just begin in web technos. I meant if I disable client-side validation, all the data-val (of all elements on the form) will have no effect?
@bado - if you turn off client-side validation then it will no longer generate any of the data-val attributes.
0

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

DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes = false;

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.