Asp.net-Mvc
自定義格式日期的 MVC3 不顯眼日期驗證
我有一個日期欄位(我正在使用 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為字元串,它仍然會失敗。
所以看起來jquery.validate.unobtrusive有問題
input type="date"。這一定是只出現在 IE 和 Safari 中的 bug。當我刪除不顯眼的 js 文件時,它送出了表單。當我重新添加不顯眼的 js 文件並將輸入類型更改為文本時,它起作用了。
煩人的錯誤。需要修復。
我認為格式字元串中的連字元(“-”)有問題:
[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)); };如此處實施