我正在編寫一個編輯器模板,用於輸入由三個字段組成的日期和時間。在MVC3編輯器模板中獲取驗證屬性
- 帶有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
屬性。我想獲得生成的屬性。
我沒有看到你的2個輸入字段的點。他們沒有名字。它們的值永遠不會發送到服務器。你爲什麼需要它們?我看到第一個是隻讀的。你想在只讀字段上進行什麼驗證? –
@DarinDimitrov:我使用JavaScript將完整的日期和時間值複製到隱藏的輸入中(請參閱我的更新)。 –
所以你需要第二個字段的驗證,因爲第一個字段是隻讀的?您需要更精確的驗證? –