【发布时间】:2012-02-10 19:07:52
【问题描述】:
我有一个编辑视图,其中包含一个选择列表和几个为可空日期字段生成的文本框。如果不存在日期,则不会进行验证 - 这是正确的。
但是,如果我输入了无效的日期,验证不会检测到这一点,并继续执行我的操作。如何强制验证日期字段?
我的模特:
public class CaseEmployer
{
public int Id { get; set; }
public int CaseId { get; set; }
public Company Company { get; set; }
[Display(Name = "Start Date")]
[DisplayFormat(DataFormatString = "{0:MM/dd/yyyy}", ApplyFormatInEditMode=true)]
public DateTime? StartDate { get; set; }
[Display(Name = "End Date")]
[DisplayFormat(DataFormatString = "{0:MM/dd/yyyy}", ApplyFormatInEditMode = true)]
public DateTime? EndDate { get; set; }
public int? UserId { get; set; }
public DateTime? TimeStamp { get; set; }
}
我的观点:
@using (Html.BeginForm())
{
@Html.ValidationSummary(true)
<fieldset>
<legend>Employer</legend>
@Html.HiddenFor(model => model.Id)
@Html.HiddenFor(model => model.CaseId)
<div class="editor-label">
@Html.Label("Company:")
</div>
<div class="editor-field">
<select name="companySelect" id="companySelect">
@foreach (var company in ViewBag.CompanyOptions)
{
<option value="@company.Key">@company.Value</option>
}
</select>
</div>
<div class="editor-label">
@Html.LabelFor(model => model.StartDate)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.StartDate)
@Html.ValidationMessageFor(model => model.StartDate)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.EndDate)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.EndDate)
@Html.ValidationMessageFor(model => model.EndDate)
</div>
<p>
<input type="submit" value="Update" />
<input type="button" value="Cancel" onclick="javascript:window.close()" />
<input type="button" value="Delete" onclick="javascript:confirmDeleteCaseEmployer()" />
</p>
</fieldset>
** 编辑 **
我在类中添加了“必需”属性来测试验证是否会触发,如果我提交的表单没有 StartDate 和 EndDate,并且验证确实会使用这些属性触发。
谢谢!
【问题讨论】:
-
哪些字段未验证?您的 DateTime 字段之一没有对其进行验证,而另外两个都具有必需的验证,那么为什么它们甚至可以为空?
-
@qes,它们不是必须为空才能在表单首次呈现时显示具有空白值的文本框吗?
-
抱歉,Required 用于测试。
标签: asp.net-mvc-3 unobtrusive-validation