ASP.NET MVC アプリケーションで作業しています。次のようなビューモデルがあります。
public class SampleInterestViewModel
{
//Properties defined
//One such property that shows an error in ModelState is as follows
public DateTime? SampleDate { get; set; }
}
UI パースペクティブから、ユーザーは日付を mmddyyyy として入力できます。また、ユーザーが 01012001 などの形式で入力すると、コントローラーの ModelState.IsValid コード部分が false を返します。ModelState をざっと見てみると、「値 01012001 は SampleDate に対して有効ではありません」というプロパティ "SampleDate" のエラーが表示されます。
モデルバインダーで、OnModelUpdated イベント中に、値 01012001 を 01/01/2001 にフォーマットしようとし、それを SampleInterestViewModel.SampleDate に戻して、ModelState.IsValid がエラーなしで true を返す可能性があると考えました。しかし、それでも ModelState.IsValid は false であり、ModelState ディクショナリを調べたところ、この特定のプロパティにはまだそのエラーがコレクションに含まれています。
最後に、01012001 をフォーマットして、値 01/01/2001 を ModelState ディクショナリのプロパティ SampleDate に直接更新しようとしました。ただし、ModelState.IsValid は false であり、SampleDate プロパティに対して同じエラーが表示されます。ModelState.IsValid が機能する理由と、いつどのように false に設定されるかを理解できません。
ユーザーが UI に 01012001 を入力した場合でも、modelbinder で 01/01/2001 にフォーマットし、ModelState.IsValid が true であることを確認して、残りのコントローラー コードが期待どおりに動作できるようにする必要があります。UI では、sampleDate 値を投稿するために AjaxSubmit を実行しています。
任意の考えやコメント。