【发布时间】:2011-12-24 22:29:42
【问题描述】:
我有一个日期字段(我正在使用 jquery ui datepicker),格式是我格式化的,如下所示:
视图模型
[DisplayFormat(DataFormatString = "{0:dd-MMM-yyyy}", ApplyFormatInEditMode = true)]
public DateTime FooDate { get; set; }
查看
@Html.EditorFor(m => m.FooDate)
这会以我想要的方式正确显示日期,例如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"
我的 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 更改为字符串,它仍然会失败。
【问题讨论】:
-
你声明日期选择器时是否设置了相同的日期格式? $('#date').datepicker({ constrainInput: true, dateFormat: 'D, dd M yy'... 类似这样的
-
是的,我做到了。我在页面加载时从视图中加载了一个默认日期,但它仍然不喜欢它
-
就我而言,我在模型中格式化日期,我使用 string.format 直接在视图中执行此操作,并且验证通过。也许你可以试一试:)
标签: asp.net-mvc asp.net-mvc-3 jquery-validate datepicker unobtrusive-validation