Asp.net-Mvc

自定義格式日期的 MVC3 不顯眼日期驗證

  • June 9, 2017

我有一個日期欄位(我正在使用 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));
};

如此處實施

引用自:https://stackoverflow.com/questions/8059093