3 つのフィールドで構成される日付と時刻を入力するためのエディター テンプレートを作成しています。
- jQuery UI の日付ピッカーを含むテキスト ボックス。
- 時間を入力するテキストボックス。
- JavaScript を介して完全な日付と時刻の文字列で更新される非表示の入力。
モデルにバインドされるフィールドは 1 つだけですが、ユーザーに表示される日付と時刻のフィールドを別々にするという考え方です。表示されるフィールドが変更されるたびに、隠しフィールドは 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
。代わりに生成された属性を取得したいと思います。