文章出處

今天在招聘頻道(job.cnblogs.com)遭遇這樣一個問題——在360瀏覽器下,在一個表單驗證中,雖然輸入了有效的日期,卻總是提示日期格式錯誤,見下圖:

而在Chrome/Safari/Firefox中都正常。

這個表單驗證用的是jquery.validate.js + jquery.validate.unobtrusive.js,驗證代碼是由ASP.NET MVC自動生成的。

視圖中的代碼是這么寫的:

<label>截止日期<em>*</em></label>
@Html.TextBoxFor(m => m.ExpireDate, new
                                    {
                                        @class = "date",
                                        Value = Model.ExpireDate.Value.ToString("yyyy-MM-dd")
                                    })
@Html.ValidationMessageFor(m => m.ExpireDate)

ViewModel中是這么聲明的:

[DataType(DataType.DateTime, ErrorMessageResourceType = typeof(CommonValidationMessage), 
    ErrorMessageResourceName = "DateTime")]
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "yyyy-MM-dd")]
public DateTime? ExpireDate { get; set; }

折騰半天無果。。。

后來轉念一想,何必糾結于日期類型,直接用正則表達式驗證不是更簡單嗎?

于是——

視圖中去掉class="date":

<label>截止日期<em>*</em></label>
@Html.TextBoxFor(m => m.ExpireDate, new
                                    {
                                        Value = Model.ExpireDate.Value.ToString("yyyy-MM-dd")
                                    })
@Html.ValidationMessageFor(m => m.ExpireDate)

ViewModel中的聲明改為:

[RegularExpression(@"\d\d\d\d-\d\d-\d\d", ErrorMessage = "請輸入正確的日期格式(yyyy-MM-dd)")]
public DateTime? ExpireDate { get; set; } 

問題解決。


文章列表


不含病毒。www.avast.com
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()