0

私のモデルにpublic DateTime Date {get;set;}プロパティがあるとしましょう。ビューでは、2つのテキストボックスで表す必要があります。1つは日付用、もう1つは時刻用です。

2つの異なるエディターテンプレートを作成しました

DateTime.cshtml:

@model DateTime?
@Html.TextBox("", (Model.HasValue ? Model.Value.ToShortDateString() : string.Empty), new { @class = "datePicker", style = "width:90px"  })

およびTimeOnly.cshtml

@model DateTime?
@Html.TextBox("", (Model.HasValue ? Model.Value.ToShortTimeString() : string.Empty), new { @class = "timePicker", style = "width:90px" })

そして、ビューのEditorForフィールド

@Html.EditorFor(x => x.Date)
@Html.EditorFor(x => x.Date,"TimeOnly")

ここで問題となるのは、コントローラーに渡されるDateプロパティの実際の値のデフォルト時刻が12:00であるということです。EditorForフィールドの順序を変更すると、同じことが日付にも起こります。日付は、TimeOnlyテンプレートが適用された直後にデフォルトの日付値にロールバックされますが、時間の部分は正しいままです。

ビュー自体でも値は問題ありませんが、送信時に、正しい日付とデフォルトの時刻、またはその逆のいずれかでデフォルト値をコントローラーに渡します(最初に使用したテンプレートによって異なります)

もちろん、モデルに別のプロパティを追加するだけで、いつでも日付と時刻を分離できますが、より良い解決策はありますか?

4

1 に答える 1

1

Scott Hanselmanは、この場合にカスタムモデルバインダーをどのように使用できるかについてブログに書いています。

于 2011-07-05T18:33:38.040 に答える