0

終了日が開始日よりも大きいことを確認したい 2 つの日付フィールドがあります。うまくいくように見えますが、常にそうとは限りません。異なる日付でテストすると、機能しなくなります。フールプルーフを使用しています。ここにコードがあります

    @using (Html.BeginForm("CreateMeeting", "Home", FormMethod.Post, new { @class = "form-horizontal", role = "form" }))
    {
        @Html.AntiForgeryToken()
        <h3>Book a new visit</h3>
        <div>The information entered below will be sent to the visitors email address @Model.Info.Email</div>
        <p>&nbsp;</p>
        @Html.ValidationSummary("", new { @class = "text-danger" })
        <div class="form-group">
            @Html.LabelFor(m => m.NewMeeting.Title, new { @class = "col-md-2 control-label" })
            <div class="col-md-10">
                @Html.TextBoxFor(m => m.NewMeeting.Title, new { @class = "form-control" })
            </div>
        </div>
        <div class="form-group">
            @Html.LabelFor(m => m.NewMeeting.StartTime, new { @class = "col-md-2 control-label" })
            <div class="col-md-10">
                @Html.TextBoxFor(m => m.NewMeeting.StartTime, new { @class = "datetimepicker form-control" })
            </div>
        </div>
        <div class="form-group">
            @Html.LabelFor(m => m.NewMeeting.EndTime, new { @class = "col-md-2 control-label" })
            <div class="col-md-10">
                @Html.TextBoxFor(m => m.NewMeeting.EndTime, new { @class = "datetimepicker form-control" })
            </div>
        </div>
        <div class="form-group">
            <div class="col-md-offset-2 col-md-10">
                @Html.HiddenFor(m => m.NewMeeting.SubjectId)
                @Html.HiddenFor(m => m.NewMeeting.FirstName)
                @Html.HiddenFor(m => m.NewMeeting.LastName)
                @Html.HiddenFor(m => m.NewMeeting.Email)
                @Html.HiddenFor(m => m.NewMeeting.HostEmail)
                @Html.HiddenFor(m => m.NewMeeting.HostMobile)
                <input type="submit" class="btn btn-default" value="Send Invite" />
            </div>
        </div>
    }

モデルが宣言されている

public class Meeting
{
    [Key]
    public int Id { get; set; }

    [Required]
    [Display(Name = "Reason for invitation")]
    public string Title { get; set; }

    [Required]
    [Display(Name = "Start Time")]
    [DataType(DataType.DateTime)]
    public DateTime StartTime { get; set; }

    [Required]
    [Display(Name = "End Time")]
    [DataType(DataType.DateTime)]
    [GreaterThan("StartTime")]
    public DateTime EndTime { get; set; }

    public string HostEmail { get; set; }

    public string HostMobile { get; set; }    

    public NotificationMethod HostNotificationMethod { get; set; }

    public bool HostAlreadyNotified { get; set; }
}

スクリプトをバンドルとして追加

        bundles.Add(new ScriptBundle("~/bundles/foolproof").Include(
                    "~/Client Scripts/mvcfoolproof.unobtrusive.js"));

そして _Layout.cshtml ページに

@Scripts.Render("~/bundles/jquery")
@Scripts.Render("~/bundles/jqueryval")
@Scripts.Render("~/bundles/foolproof")

何が起こっているのか、どんなアイデアでも。終了日が開始日よりも前の日付を初めて選択したようですが、検証は機能します。ただし、システムを壊すためにさまざまな日付をいじり始めると、システムが機能しなくなり、開始日よりも前の終了日でフォームが送信されます。終了日が開始日よりも大きい状態になることもありますが、開始日がさらに大きいと見なされるため、検証はまだ失敗します。

スクリーンショットを参照してください。終了日と開始日をいじった後、次のような状態になることがあります。

https://postimg.org/image/rki9qfmtz/

4

0 に答える 0