3

次の仮定をしてみましょう。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行のソリューションを探しています。

4

0 に答える 0