終了日が開始日よりも大きいことを確認したい 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> </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")
何が起こっているのか、どんなアイデアでも。終了日が開始日よりも前の日付を初めて選択したようですが、検証は機能します。ただし、システムを壊すためにさまざまな日付をいじり始めると、システムが機能しなくなり、開始日よりも前の終了日でフォームが送信されます。終了日が開始日よりも大きい状態になることもありますが、開始日がさらに大きいと見なされるため、検証はまだ失敗します。
スクリーンショットを参照してください。終了日と開始日をいじった後、次のような状態になることがあります。