Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 3 未在可为空的日期字段上触发不引人注目的验证_Asp.net Mvc 3_Unobtrusive Validation - Fatal编程技术网

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,当表单第一次呈现时,它们不一定要为空才能显示带有空值的文本框吗?抱歉,需要的字段用于测试。