所以我有这个表格,用户可以在其中输入开始时间和结束时间(预订)。数据库中的值是 DateTimes,但 Date 部分被完全忽略。目前,当我进入例如。“5:00 pm”(通过 jQuery 时间选择器),它说这不是一个有效的日期。如果我键入“2013 年 1 月 30 日下午 5:00”,它会认为这是有效的......如何将这种行为更改为仅作为时间验证?(或者如果这不理想,我怎样才能完全关闭该字段的验证 - 我将在控制器中手动处理验证)
我看到了这个:http ://connect.microsoft.com/VisualStudio/feedback/details/705643/a-data-val-date-attribute-is-generated-for-time-fields-in-asp-net-mvc- 4#但微软声称已修复;不确定这是否是同一个问题。我不想将数据库定义更改为 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>