У меня есть модель, которая выглядит так:
public class RegisterResultAdminModel
{
[DateInThePastValidator(ErrorMessage = "Date needs to be a valid date set in the past.")]
[Required(ErrorMessage = "You need to set Date.")]
public DateTime DatePlayed { get; set; }
}
Мой валидатор выглядит так:
public class DateInThePastValidator : ValidationAttribute
{
public override bool IsValid(object value)
{
var date = (DateTime)value;
if (date > DateTime.UtcNow)
return false;
return true;
}
}
Я установил DatePlayed в DateTime.Today в методе Index моего контроллера:
...
model.DatePlayed = DateTime.Today;
return View(model);
В моем Index.cshtml у меня есть следующий код:
@model Web.Models.RegisterResultAdminModel
...
<p>@Html.TextBoxFor(m => m.DatePlayed, new { @Value = Model.DatePlayed, id = "datepicker" })</p>
...
<script>
$(function() {
$("#datepicker").datepicker({ dateFormat: 'dd-MM-yy'});
});
</script>
TextBoxFor находится внутри Html.BeginForm.
Хорошо, готовлюсь к моей проблеме сейчас. При отображении страницы дата отображается как 14.09.2017 00:00:00. Справедливо. Но когда я нажимаю «Отправить», валидатор показывает значение как нулевое (я вижу это в отладчике). Однако, если я сначала нажму на средство выбора даты, а затем выберу дату, она отобразится как 14-September-2017. Теперь, когда я нажимаю «Отправить», валидатор принимает дату (теперь отладчик показывает дату), и все остальное работает нормально.
Есть много статей по, казалось бы, очень похожим вопросам, но я, должно быть, упускаю что-то очевидное.
Как я могу заставить это работать?
Изменить: добавление пояснения к параметру "отображается как нуль"
new { @Value = Model.DatePlayed }
и НИКОГДА не пытайтесь переопределить атрибутvalue
при использовании методовHtmlHelper
. - person   schedule 14.09.2017DateTime
, и если бы оно былоnull
, вы бы сначала получили другую ошибку. И вы отправляете дату в формате, который не соответствует культуре вашего сервера, поэтому она все равно не может быть привязана - person   schedule 14.09.2017@Html.TextBoxFor(m => m.DatePlayed, "{0:dd-MMMM-yyyy}", new { id = "datepicker" })
для форматирования начального дисплея. НО мне нужно немного поспать, так что не стесняйтесь добавлять свой собственный ответ. - person   schedule 14.09.2017