我的模型看起来像这样:
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:
...
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中。
好的,现在就为我的问题做好准备。显示页面时,日期显示为 09/14/2017 00:00:00 。很公平。但是当我单击提交时,验证器显示的值为null(我可以在调试器中看到这一点)。但是,如果我首先点击日期选择器,然后选择显示为 2017年9月14日的日期。现在,当我单击提交时,验证器接受日期(调试器现在显示日期),其他一切正常。
关于看似非常相似的事情,有很多文章,但我必须遗漏一些明显的事情。
我该如何做到这一点?
修改:向&#34;添加说明显示为空&#34;
答案 0 :(得分:0)
只是为了得到答案,sicne有一个正确的答案:
Stephen Muecke正确地指出我不应该设置new { @Value = Model.DatePlayed }
。当我使用他的第二个建议时,我的日期格式问题就消失了:
Html.TextBoxFor(m => m.DatePlayed, "{0:dd-MMMM-yyyy}", new { id = "datepicker" })
这件事之后就行了。谢谢你的帮助!