MVC3自定义格式化日期的不显眼日期验证

jzm*_*jzm 7 asp.net-mvc datepicker jquery-validate unobtrusive-validation asp.net-mvc-3

我有一个日期字段(我使用jquery ui datepicker)在我格式化的表单中,如下所示:

视图模型

[DisplayFormat(DataFormatString = "{0:dd-MMM-yyyy}", ApplyFormatInEditMode = true)]
public DateTime FooDate { get; set; }
Run Code Online (Sandbox Code Playgroud)

视图

@Html.EditorFor(m => m.FooDate)
Run Code Online (Sandbox Code Playgroud)

这正确地显示了我想要它的日期,例如 09-Nov-2011

我收到的问题发生在我按提交时.它一直告诉我日期无效....这是有效的,你这个蠢事!

有什么办法,我可以得到jquery/unobtrusive javascript忽略这个字段或允许这种格式通过?到目前为止,我可以让表单工作的唯一方法是,如果我不格式化日期,或使用{0:d}作为日期格式.

编辑:我已经创建了一个完全独立的布局+视图+控制器+模型来测试这个愚蠢的东西.仍然无法在IE/Safari中运行.我有来自nuget的最新jquery.validate/unobtrusive文件.

layout是空的.它只是加载以下文件:

"jquery-1.7.min.js"
"jquery-ui-1.8.16.min.js"
"jquery.validate.min.js"
"jquery.validate.unobtrusive.min.js"
Run Code Online (Sandbox Code Playgroud)

我的TestViewModel很简单:

public class TestViewModel
{
    [Display(Name = "Test Date:")]
    [DisplayFormat(DataFormatString = "{0:dd/MMM/yyyy}", ApplyFormatInEditMode = true)]
    public DateTime? TestDate { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我的TestController如下:

public class TestController : Controller
{
    public ActionResult Index()
    {
        var m = new TestViewModel();
        m.TestDate = DateTime.Now;
        return View(m);
    }
}
Run Code Online (Sandbox Code Playgroud)

我的看法:

@using (Html.BeginForm())
{
    ViewContext.FormContext.ValidationSummaryId = "valSumId";
    @Html.ValidationSummary(false, "The following errors were found:");
    @Html.AntiForgeryToken()

    @Html.LabelFor(m => m.TestDate)
    <input type="date" id="TestDate" value="@Model.TestDate.Value.ToString("dd/MMM/yyyy")" />
    <input type="submit" />
}
Run Code Online (Sandbox Code Playgroud)

没有工作.

你知道烦人的是什么吗?如果我更改TestDate为字符串,它仍然会失败.

jzm*_*jzm 3

所以看起来jquery.validate.unobtrusive有问题input type="date"。这肯定是一个只出现在IE和Safari中的bug。

当我删除不显眼的 js 文件时,它提交了表单。当我重新添加不显眼的 js 文件并将输入类型更改为文本时,它起作用了。

烦人的错误。需要修复。