TimeSpan
ASP.NET MVC 4 アプリケーションには、null 許容プロパティを含むビュー モデルがあります。
[DisplayName("My time")]
public TimeSpan? MyTime { get; set; }
ビューの入力要素にバインドされています。
@Html.EditorFor(model => model.MyTime)
入力ボックスは、カスタム エディター テンプレートの助けを借りてレンダリングされますTimeSpan.cshtml
。
@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 })
ここで、次の 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
ますが、ページの検証の概要に表示されます。しかし、それは空なので、あまり役に立ちません。
理想的には、無効な入力の 2 番目のケースでは、最初のケースのように同じ種類のエラー メッセージを表示することをお勧めします"The value \"25:12\" for \"My time\" is invalid."
。
どうすればこの問題を解決できますか?
編集
カスタム検証属性は、モデル バインダーが既に無効な値を検出している場合、上記の例の無効な入力に対して呼び出されないため、明らかにここでは役に立ちません。私はそのアプローチを試みましたが、成功しませんでした。