ASP.NET MVC 4 избегает генерации данных-val-date для datetime

Как можно избежать генерации html-атрибута "data-val-date" для элемента, созданного из свойства Datetime?

Модель:

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 на три длинных для каждого значения (день, месяц, год).

3 ответа

Решение

data-val-date используется системой валидации для валидации даты. Если вы удалите его, проверка на стороне клиента не будет работать.

Если это то, что вы хотите, просто отключите проверку на стороне клиента.

Хорошо, это заняло у меня полдня работы... очевидно, mvc4 решил, что пришло время сделать data-val-date="Message" для КАЖДОГО свойства datetime в viewmodel. Я пытался изменить это поведение по умолчанию, но безуспешно.

Это решило мои проблемы:

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

Вы также можете попробовать написать свой собственный шаблон редактора с именем "DateTime.cshtml" в общей папке EditorFor, но не используйте там TextBoxFor, поскольку он также загрязнен.

Добавьте это в начало вашего приложения в вашем файле global.asax, и форма должна сработать.

DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes = false;
Другие вопросы по тегам