単純な形式の DTO オブジェクトを使用する HttpPost コントローラー アクションがあります。
[HttpPost]
public ViewResult Index(ResultQueryForm queryForm)
{
...
}
public class ResultQueryForm
{
public DateTime? TimestampStart { get; set; }
public DateTime? TimestampEnd { get; set; }
public string Name { get; set; }
}
DTO オブジェクトには、範囲の作成に使用される null 許容の日時フィールドがあります。nullable に設定されている理由は、モデルにバインドされているフォームがクエリ フォームであり、ユーザーがフォームに日付値を入力する必要がないためです。
私が直面している問題は、ユーザーが無効な日付を入力した場合、MVC の既定のモデル バインディングでエラー メッセージを表示することです。DateTime を受け取るコントローラー アクションがある場合、これは問題なく発生しますか? 引数として入力しますが、DateTime を保持する DTO を渡しているので? モデル バインディングを入力すると、DateTime を設定するだけのように見えますか? 変数を null にします。これにより、予期しない結果が発生します。
ノート:
[HttpPost]
public ViewResult Index(DateTime? startDate)
{
// If the user enters an invalid date, the controller action won't even be run because the MVC model binding will fail and return an error message to the user
}
DateTimeをバインドできない場合、MVCモデルバインディングに「失敗」するように指示する方法はありますか? null に設定するのではなく、フォーム DTO オブジェクトに値を設定しますか? より良い方法はありますか?form/dto オブジェクトには大量のプロパティがあるため、個々のフォーム入力をコントローラーに渡すことは不可能です (読みやすくするために、それらの多くを除外しました)。