Asp.net mvc 3 未在可为空的日期字段上触发不引人注目的验证
我有一个编辑视图,有一个选择列表和一对为空日期字段生成的文本框。如果没有日期,则不会进行验证-这是正确的 但是,如果我输入了无效的日期,验证将不会检测到该日期,并继续执行我的操作。如何强制对日期字段进行验证 我的模型:Asp.net mvc 3 未在可为空的日期字段上触发不引人注目的验证,asp.net-mvc-3,unobtrusive-validation,Asp.net Mvc 3,Unobtrusive Validation,我有一个编辑视图,有一个选择列表和一对为空日期字段生成的文本框。如果没有日期,则不会进行验证-这是正确的 但是,如果我输入了无效的日期,验证将不会检测到该日期,并继续执行我的操作。如何强制对日期字段进行验证 我的模型: public class CaseEmployer { public int Id { get; set; } public int CaseId { get; set; } public Company Company { get; set; }
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的表单,并且验证确实会使用这些属性触发
谢谢大家! 如果希望验证日期-时间字段,可能需要查看regularexpression validate属性,以帮助客户端低调的JavaScript验证预期输入。displayformat属性不会影响验证,只会影响datetime值的显示方式
当代码显示时,在表单发布到控制器操作之前,基本上不会进行验证。由于updatemodel无法将某些输入转换为datetime值,因此会出现模型格式转换错误 哪些字段未验证?其中一个DateTime字段没有验证,另外两个字段都需要验证,为什么它们甚至可以为空?@qes,当表单第一次呈现时,它们不一定要为空才能显示带有空值的文本框吗?抱歉,需要的字段用于测试。