【问题标题】:unobtrusive validation not firing on nullable date field不显眼的验证不会在可为空的日期字段上触发
【发布时间】: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


【解决方案1】:

如果您打算验证日期时间字段,您可能需要查看正则表达式验证属性,以帮助客户端不显眼的 JavaScript 验证预期输入。您的 displayformat 属性不会影响验证,只会影响日期时间值的显示方式。

显示您的代码后,在表单发布到控制器操作之前,基本上不会发生验证。由于 updatemodel 无法将您的某些输入转换为日期时间值,因此您会遇到模型格式转换错误。

【讨论】:

    猜你喜欢
    • 2019-10-09
    • 2019-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-14
    • 1970-01-01
    相关资源
    最近更新 更多