私のモデルに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テンプレートが適用された直後にデフォルトの日付値にロールバックされますが、時間の部分は正しいままです。
ビュー自体でも値は問題ありませんが、送信時に、正しい日付とデフォルトの時刻、またはその逆のいずれかでデフォルト値をコントローラーに渡します(最初に使用したテンプレートによって異なります)
もちろん、モデルに別のプロパティを追加するだけで、いつでも日付と時刻を分離できますが、より良い解決策はありますか?