[英]MVC2 client/server validation of DateTime/Date using DataAnnotations
以下是正確的:
我的好友類中具有以下驗證邏輯:
[Required(ErrorMessageResourceType = typeof(Project.Web.ValidationMessages), ErrorMessageResourceName = "Required")]
[RegularExpression(@"\b(0?[1-9]|1[012])[/](0?[1-9]|[12][0-9]|3[01])[/](19|20)?[0-9]{2}\b", ErrorMessageResourceType = typeof(Project.Web.ValidationMessages), ErrorMessageResourceName = "Invalid")]
public virtual DateTime? BirthDate
{
get;
set;
}
這有兩個問題:
這不會通過服務器端驗證(如果我啟用了客戶端驗證,則可以正常工作)。 我認為這是因為正則表達式未考慮小時,分鍾,秒,因為在進行時間驗證時,文本框中的值已在服務器上轉換為DateTime。
如果數據已經存在於數據庫中並被讀入模型並顯示在頁面上,則BirthDate字段會在我的文本框中顯示小時,分鍾,秒(我不想要)。 我總是可以使用ToShortDateString(),但是我想知道是否有一些更干凈的方法可能會丟失。
謝謝
1:通過將DateTime更改為不可為空,可以輕松解決此問題,這意味着輸入的datetime值必須是可解析的,因此有效,然后使用:
[DataType(DataType.Date)]
屬性而不是正則表達式。 這將確保該字段是必填字段並且必須是可解析的。
2:這是一個模板問題。 最簡單的方法是在/ Views / Shared / EditorTemplates內部創建一個自定義的Date.ascx模板,該模板調用ToShortDateString()並連接您的jquery datepicker。
這是我的樣子:
<%@ Import Namespace="System.Web.Mvc.Html" %>
<%
string displayText = string.Empty;
if (Model != null)
{
if (DateTime.Parse(Model.ToString()) != DateTime.MinValue)
displayText = DateTime.Parse(Model.ToString()).ToShortDateString();
}
%>
<%= Html.TextBox("", displayText, new { @class = "date-box" })%>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.