単純なフォームのDTOオブジェクトを取り込むHttpPostコントローラアクションがあります。ASP.NET MVC 3 - 失敗の代わりにHTTP POSTにバインドするときにDTOにnullフィールドを設定する
[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可能なdatetimeフィールドがあります。 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
}
は、日時をバインドすることができない場合は、「失敗」するために結合MVCモデルを伝えるためにとにかくありますか?値をフォームDTOオブジェクトに渡すのではなく、nullに設定するだけです。より良い方法がありますか?個々のフォーム入力をコントローラに渡すことは、フォーム/ dtoオブジェクトの大量のプロパティのために実行不可能です(私は読みやすいようにそれらの多くを除外しています)。
'ModelState.IsValid'を確認しましたか? –