标题说的很明白。该模型不需要StartDate字段,但在提交时我被告知它是必需的。它是多个搜索字段之一,每个字段都是可选的。由于这个原因,我没有检查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" })
}
顺便说一下,其中一些编辑器是为了使弹出式日历工作的。
我已经尝试开启/关闭各种选项,但无论如何,它仍然显示日期字段是必填项。有什么想法吗?谢谢。