そのため、ユーザーが開始時刻と終了時刻(予約の場合)を入力できるこのフォームがあります。データベースの値はDateTimesですが、Date部分は完全に無視されます。現在、例えばを入力すると。「5:00pm」(jQueryタイムピッカー経由)、これは有効な日付ではないと表示されます。「30/1/20135:00pm」と入力すると、これが有効として受け入れられます...時間としてのみ検証するようにこの動作を変更するにはどうすればよいですか?(または、それが理想的でない場合、そのフィールドの検証を完全にオフにするにはどうすればよいですか?コントローラーで検証を手動で処理します)
私はこれを見ました:http://connect.microsoft.com/VisualStudio/feedback/details/705643/a-data-val-date-attribute-is-generated-for-time-fields-in-asp-net-mvc- 4#ですが、Microsoftはそれが修正されたと主張しています。これが同じ問題であるかどうかはわかりません。データベース定義をTimeSpanに変更したくないのは、既存のデータが台無しになると思うからです(そうはなりませんか?)。
コントローラ:
[HttpPost]
public ActionResult Create(BookingDetailsDate bookingdetailsdates) //, FormCollection collection)
{
if (ModelState.IsValid)
{
try
{
//bookingdetailsdates.StartTime = DateTime.Parse(collection["StartTime"]); // TODO: do this better
//bookingdetailsdates.EndTime = DateTime.Parse(collection["EndTime"]);
bookingdetailsdatesRepository.Add(bookingdetailsdates);
bookingdetailsdatesRepository.Save();
return RedirectToAction("Index", new { id = bookingdetailsdates.BookingDetailsID });
}
catch { }
}
return View(bookingdetailsdates);
}
意見:
@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
<legend></legend>
...
@Html.EditorFor(model => model.StartTime)
@Html.EditorFor(model => model.EndTime)
<p>
<input type="submit" value="Save" />
</p>
</fieldset>
}
エディターテンプレート:
<div class="editor-label">
@Html.LabelFor(m => m)
</div>
<div class="editor-field">
@if (Model.HasValue==true)
{
@Html.TextBox("", Model.Value.ToShortTimeString(), new { @class = "TimePicker" })
}
else
{
@Html.TextBoxFor(m => m, new { @class = "TimePicker" })
}
@Html.ValidationMessageFor(m => m)
</div>