Html.EditorFor nullable DateTime отправляя назад как ноль из представления - PullRequest
3 голосов
/ 02 февраля 2012

Позволяет сделать следующие предположения;ASP.NET MVC 3 Razor C #, строго типизированное представление, привязанное к модели представления (не к сущностям и т. Д.), Использующее метод Html.EditorFor, чтобы редактировать свойство DateTime с нулевым значением в модели представления.Кажется, что два добавленных мной атрибута аннотации данных вызывают сбой привязки модели.

Пример кода представления

@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 и атрибутами проверки аннотации данных?

Можем ли мы найти решение, которое не включает в себя повторное создание колеса путем создания нескольких дополнительных классов, помощников, шаблонов и написания большого количества дополнительного кода?Я ищу решение на одну или две строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...