Я пишу шаблон редактора для ввода даты и времени, который состоит из трех полей.
- Текстовое поле с датщиком jQuery UI.
- Текстовое поле для ввода времени.
- Скрытый ввод, который обновляется с использованием полной строки даты и времени через javascript.
Идея состоит в том, чтобы отображать пользователю отдельные поля для даты и времени, при этом только одно поле связано с моделью. Всякий раз, когда отображаемые поля изменяются, скрытое поле обновляется с помощью JavaScript.
@model System.DateTime?
<span class="datetime-editor">
<input class="datepicker" value="@(Model.HasValue ?
Model.Value.Date.ToString() : string.Empty)" readonly="readonly"/>
<input class="time" value="@(Model.HasValue ?
Model.Value.TimeOfDay.ToString() : string.Empty)"/>
@Html.HiddenFor(d => d)</span>
JavaScript для настройки средства выбора даты и копирования значений в скрытое поле.
$(".datepicker").datepicker();
$(".datetime-editor").find("input").change(function () {
var date = $(this).parent().find(".datepicker").val();
var time = parseTime($(this).parent().find(".time").val());
if (date != "" && time != null) {
$(this).siblings(".datetime-result").val(date + " " + time);
}
else {
$(this).siblings(".datetime-result").val("");
}
});
Моя проблема в атрибутах проверки. Все они присутствуют в скрытом теге ввода:
<input name="StartDateTime" id="StartDateTime" type="hidden"
data-val-required="Start date and time are required" data-val="true" value=""/>
Я бы хотел как-то захватить сгенерированные атрибуты data-val*
и добавить их вместо видимых входных данных. Через ViewData.ModelMetaData
я могу узнать, является ли поле обязательным или нет, но тогда мне придется заново изобрести логику, чтобы создать атрибут data-val-required
. Вместо этого я хотел бы получить сгенерированные атрибуты.