Asp.net-Mvc

在 asp.net MVC 不顯眼的驗證中驗證僅時間輸入

  • June 6, 2013

我在頁面上有兩個單獨的欄位:一個用於日期,一個用於時間。

這是模型:

[Required]
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:hh:mm tt}")]
public DateTime? StartTime { get; set; }

[Required]
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:MM/dd/yyyy}")]
public DateTime Date { get; set; }

這是視圖:

@Html.TextBoxFor(m => m.Date, "{0:MM/dd/yyyy}", new { type = "text" })
@Html.TextBoxFor(m => m.StartTime, "{0:hh:mm tt}", new { type = "text", id = "timeStart" })

javascript 不顯眼的驗證適用於該欄位但是當我在驗證顯示Date中輸入“11:00 PM”或“11:00 pm”時StartTime

“欄位 StartTime 必須是日期”

伺服器端驗證工作正常,"0:hh:mm tt"只有 javascript 有問題。現在我只是禁用了 javascript 驗證,但最終希望在這個頁面上有它

這可以在“時間”領域完成嗎?

老實說,實現這一點的最簡單方法是使用正則表達式驗證器。這是一個例子。

[RegularExpression(@"^(0[1-9]|1[0-2]):[0-5][0-9] (am|pm|AM|PM)$", ErrorMessage = "Invalid Time.")]

不顯眼的驗證應該適用於這個表達式。

希望這可以幫到你!

編輯

我已經修復了由於一些非法字元而開始在控制台中引發錯誤的正則表達式。此外,您將需要此屬性的字元串屬性包裝器,否則它將始終尋找有效的DateTime.

以下是您應該綁定的內容。

模型:

public DateTime? StartTime { get; set; }

[Required]
[RegularExpression(@"^(0[1-9]|1[0-2]):[0-5][0-9] (am|pm|AM|PM)$", ErrorMessage = "Invalid Time.")]
public string StartTimeValue
{
   get
   {
       return StartTime.HasValue ? StartTime.Value.ToString("hh:mm tt") : string.Empty;
   }

   set
   {
       StartTime = DateTime.Parse(value);
   }
}

看法:

@Html.TextBoxFor(m => m.StartTimeValue)

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