0

そのため、ユーザーが開始時刻と終了時刻(予約の場合)を入力できるこのフォームがあります。データベースの値は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>
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」型を使用することをお勧めします。なんで?説明させてください。日時は非常に複雑なタイプであり、さまざまな形式があります。「2013-1-295:00pm」、「2013/1/295:00pm」のように。古くなっているかどうかを比較して確認することが目的の場合は、この方法を使用できます。「201301291700」は12の固定長です。メリットは1です。文字列を入力することでどこにでも簡単に保存できます。2. int型またはlong型に変換することで簡単に比較できます(数値ははるかに比較しやすいですね)。

答えは私の経験に基づいています、それがあなたを助けることを願っています!

于 2013-01-30T01:29:40.067 に答える