在ASP.NET MVC 4應用我有一個包含一個可爲空TimeSpan
屬性視圖模型:顯示驗證錯誤時時間跨度模型結合發生異常
[DisplayName("My time")]
public TimeSpan? MyTime { get; set; }
它被綁定到視圖的輸入元件:
@model Nullable<System.TimeSpan>
@Html.TextBox("", (Model.HasValue
? Model.Value.ToString(@"hh\:mm") : string.Empty),
new { @class = "text-box single-line hasTimepicker" data_timepicker = true })
012:
@Html.EditorFor(model => model.MyTime)
輸入框獲取具有自定義編輯模板TimeSpan.cshtml
的幫助下呈現
現在,如果我輸入了以下2種無效時間和提交頁面我得到的模型綁定以下不同的行爲:
如果我輸入一個字母,說
"a"
到輸入元素ModelError
對於此屬性,當我鑽入ModelState.Values
集合時,已將ErrorMessage
屬性設置爲消息("The value \"a\" for \"My time\" is invalid."
),而Exception
屬性爲null
。MyTime
的界限值爲null
。此
ErrorMessage
顯示在頁面的驗證摘要中。如果我輸入無效的時間,說
"25:12"
,到輸入元素ModelError
該物業有ErrorMessage
屬性設置爲空字符串,但Exception
屬性設置爲InvalidOperationException
類型的異常類型的內部異常OverflowException
告訴我TimeSpan
無法分析,因爲它的一個數字組件超出了有效範圍。MyTime
的界限值爲null
。同樣,
ErrorMessage
顯示在頁面的驗證摘要中。但是因爲它是空的,所以它不是很有用。
在理想情況下爲無效的輸入的第二種情況下我寧願具有相同的種類等對第一種情況下的錯誤消息,例如"The value \"25:12\" for \"My time\" is invalid."
。
我該如何解決這個問題?
編輯
自定義驗證屬性顯然不幫助,因爲它不要求時的實例已經模型綁定檢測無效值以上無效的輸入。我曾嘗試過這種方法,但沒有成功。
創建一個模型聯編程序(我不太熟悉)並嘗試使用代碼的想法指出了我正確的方向,儘管我最終採用了不同的方式(請參閱我自己的答案)。我學到了一些新東西。謝謝! – Slauma 2013-05-10 18:06:24