簡體   English   中英

使用DataAnnotations的DateTime / Date的MVC2客戶端/服務器驗證

[英]MVC2 client/server validation of DateTime/Date using DataAnnotations

以下是正確的:

  • 我的一列(BirthDate)在SQL Server中的日期類型。
  • EF生成模型時,此列(BirthDate)的日期時間相同。
  • 我在客戶端上使用JQuery UI Datepicker能夠選擇BirthDate。

我的好友類中具有以下驗證邏輯:

[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;
}

這有兩個問題:

  1. 這不會通過服務器端驗證(如果我啟用了客戶端驗證,則可以正常工作)。 我認為這是因為正則表達式未考慮小時,分鍾,秒,因為在進行時間驗證時,文本框中的值已在服務器上轉換為DateTime。

  2. 如果數據已經存在於數據庫中並被讀入模型並顯示在頁面上,則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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM