3つのフィールドで構成された日付と時刻を入力するためのエディターテンプレートを作成しています。MVC3エディターテンプレートでの検証属性の取得
- jQuery UI datepickerを持つテキストボックス。
- 時間を入力するためのテキストボックス。
- 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タグ内に存在している:
<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
属性を作成するロジックを再作成する必要があります。代わりに生成された属性を取得したいと思います。
私はあなたの2つの入力フィールドのポイントが表示されません。彼らは名前を持っていません。その値は決してサーバーに送られません。なぜあなたはそれらを必要としますか?私は最初のものが読んでいることがわかります。読み取り専用フィールドではどのような検証が必要ですか? –
@DarinDimitrov:JavaScriptを使用して完全な日付と時刻の値を非表示の入力にコピーしています(私の更新を参照)。 –
したがって、第1フィールドは読み取り専用であるため、第2フィールドで検証が必要ですか?より正確にどんなバリデーションが必要ですか? –