我有一个日期字段(我使用
jquery ui datepicker)在我格式化的表单中,如下所示:
视图模型
[DisplayFormat(DataFormatString = "{0:dd-MMM-yyyy}",ApplyFormatInEditMode = true)] public DateTime FooDate { get; set; }
视图
@Html.EditorFor(m => m.FooDate)
这正确地显示了我想要它的日期,例如09 – 11月 – 2011
我收到的问题发生在我按提交时.它一直告诉我日期无效….这是有效的,你这个蠢事!
有什么办法,我可以得到jquery / unobtrusive javascript忽略这个字段或允许这种格式通过?到目前为止,我可以让表单工作的唯一方法是,如果我不格式化日期,或使用{0:d}作为日期格式.
编辑:
我已经创建了一个完全独立的布局视图控制器模型来测试这个愚蠢的东西.仍然无法在IE / Safari中运行.
我有来自nuget的最新jquery.validate / unobtrusive文件.
我的布局是空的.它只加载以下文件:
"jquery-1.7.min.js" "jquery-ui-1.8.16.min.js" "jquery.validate.min.js" "jquery.validate.unobtrusive.min.js"
我的Testviewmodel很简单:
public class Testviewmodel { [Display(Name = "Test Date:")] [DisplayFormat(DataFormatString = "{0:dd/MMM/yyyy}",ApplyFormatInEditMode = true)] public DateTime? TestDate { get; set; } }
我的TestController如下:
public class TestController : Controller { public ActionResult Index() { var m = new Testviewmodel(); m.TestDate = DateTime.Now; return View(m); } }
我的看法:
@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" /> }
没有工作.
你知道烦人的是什么吗?如果我将TestDate更改为字符串,它仍然会失败.
解决方法
我认为格式字符串中的连字符(“ – ”)存在问题:
[DisplayFormat(DataFormatString = "{0:dd-MMM-yyyy}",ApplyFormatInEditMode = true)]
默认情况下,不显眼的验证似乎不接受连字符进行日期格式化.
$.validator.methods.date = function (value,element) { var s = value; s = value.replace(/\-/g,'/'); return this.optional(element) || !/Invalid|NaN/.test(new Date(s)); };
实施here