どうすればよいですか?
POSTコントローラアクションでModelStateから削除します。
[HttpPost]
public ActionResult Foo(MyViewModel model)
{
ModelState.Remove("Date");
return View(model);
}
明らかに弱い型付けされたヘルパーで作業しないでください:
@Html.TextBox("Date", "99/99/9999")
厳密に型指定されたモデルとエディタテンプレートで作業したい
@Html.EditorFor(x => x.Date)
そしてあなたのPOSTコントローラアクションでは、必要な日付を設定します:
[HttpPost]
public ActionResult Foo(MyViewModel model)
{
ModelState.Remove("Date");
model.Date = "99/99/9999";
return View(model);
}
私は明示的に日付プロパティとしてここではおそらく間違っている文字列を使用して、私はちょうど日付として99/99/9999文字列の妥当性に困惑していた。しかし明らかに日付についても同じことが当てはまります。
その理由は、HTMLヘルパーは、ModelStateを値にバインドするときとモデルの後でバインドするときにModelStateを最初に調べるためです。したがって、モデルの値を変更しても、ModelStateで異なる値(POSTアクションで頻繁に発生する)が使用されると、ModelStateの値が使用されます。これは設計によるものです。