次の仮定をしてみましょう。ASP.NET MVC 3 Razor C#、ビューモデル(エンティティなどではない)にバインドされた厳密に型指定されたビュー。Html.EditorForメソッドを使用して、ビューモデルのnull許容のDateTimeプロパティを編集します。追加した2つのデータ注釈属性が原因で、モデルのバインドが失敗しているようです。
サンプルビューコード
@model MyApp.ViewModels.NullableDateTimeViewModel
@using (Html.BeginForm())
{
@Html.EditorFor(m => m.DateOfBirth)
}
ViewModelコードのサンプル
[DataType(DataType.Date,
ErrorMessage = "Please enter a valid date in the format dd MMM yyyy")]
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd MMM yyyy}")]
public class NullableDateTimeViewModel
{
public DateTime? DateOfBirth { get; set; }
}
サンプルコントローラーコード
[HttpPost]
public ViewResult DoB(NullableDateTimeViewModel nullableDateTimeVM)
{
ContextDB db = new ContextDB();
Customer cust = new Customer();
// DateOfBirth is null so the update fails
cust.DateOfBirth = nullableDateTimeVM.DateOfBirth.Value;
db.Customers.Add(cust);
db.SaveChanges();
}
データ注釈属性が追加されたときにビューのフォームが送信されたときに、ビューに入力されたデータはコントローラーにポストバックされません。これは、これらの属性でEditorForを使用すると、モデルのバインドが失敗することを意味します。モデルのバインドはTextBoxForで正常に機能し、TextBoxFor入力ボックスに入力された値はビューモデルとともにビューに戻されます。EditorForとデータ注釈検証属性のここでの問題は何ですか?
複数の追加のクラス、ヘルパー、テンプレートを作成し、大量の追加コードを記述して、車輪の再発明を伴わない解決策を見つけてください。私は1行または2行のソリューションを探しています。