0

所以我有这个表格,用户可以在其中输入开始时间和结束时间(预订)。数据库中的值是 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>
4

2 回答 2

0

所以问题在于 jQuery 的验证,即使我的字段的元数据指定它只是一个时间(这甚至不是严格必要的),jQuery 的验证要求该框包含完整的日期时间字符串......

注释掉这些行可以解决问题:

<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
于 2013-02-01T02:44:33.223 回答
0

我认为“DateTime”这种数据类型不是一个好的选择,如果你只是想节省用户保存的时间然后在某个地方比较它们我建议使用“nchar”类型。为什么?让我解释一下,datetime是一个非常复杂的类型,它有很多种形式。比如“2013-1-29 5:00 pm”、“2013/1/29 5:00pm”。如果您的目的是比较和检查是否过时,您可以使用这种方式。“201301291700”,它是一个固定长度,即12。这样做的好处是1。您可以通过键入字符串轻松地将其保存在任何地方。2. 你可以通过转换为 int 类型或 long 类型来轻松比较。(数字更容易比较,不是吗?)

根据我的经验回答,希望对你有帮助!

于 2013-01-30T01:29:40.067 回答