标题说明了一切。该模型不需要 StartDate 字段,但在 POST 上我被告知它是必需的。它是多个搜索字段之一,每个字段都是可选的。因此,我没有检查 IsModel.Valid 所以搜索仍然有效,但消息显示在屏幕上。如果我在视图中设置@Html.ValidationSummary(true),它会隐藏消息,但该字段仍会变为红色。
此外,我确实进行了检查以确保 EndDate 晚于 StartDate,因此我需要显示错误/所需字段的消息,而不是在没有错误时显示。
这是代码:
型号(部分)
[Display(Name = "Start Date")]
[DataType(DataType.Date)]
public DateTime StartDate { get; set; }
[Display(Name = "End Date")]
[GreaterThanOrEqualTo("StartDate", ErrorMessage = "End Date must be later than Start Date")]
[DataType(DataType.Date)]
public DateTime EndDate { get; set; }
查看(部分)
@using (Html.BeginForm()){
@Html.ValidationSummary(false)
<table>
<tr>
<td>
@Html.DisplayNameFor(m => m.StartDate)
@Html.TextBox("StartDate", "", new { @class = "datefield" })
etc.
共享/显示模板
@model Nullable<DateTime>
@(Model != null ? string.Format("{0:M/d/yyyy}", Model) : string.Empty)
共享/编辑器模板
@model Nullable<DateTime>
@{
DateTime dt = DateTime.Now;
if (Model != null)
{
dt = (System.DateTime) Model;
}
@Html.TextBox("", String.Format("{0:M/d/yyyy}", dt.ToShortDateString()), new { @class = "datefield", type = "date" })
}
顺便说一句,其中一些编辑器将制作弹出式日历。
我试过以一种或另一种方式打开/关闭各种东西,它仍然说需要日期字段。有任何想法吗?谢谢。