回发时jQuery datepicker默认日期为null

时间:2017-09-14 12:13:27

标签: jquery asp.net-mvc razor

我的模型看起来像这样:

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;

1 个答案:

答案 0 :(得分:0)

只是为了得到答案,sicne有一个正确的答案:

Stephen Muecke正确地指出我不应该设置new { @Value = Model.DatePlayed }。当我使用他的第二个建议时,我的日期格式问题就消失了:

Html.TextBoxFor(m => m.DatePlayed, "{0:dd-MMMM-yyyy}", new { id = "datepicker" })

这件事之后就行了。谢谢你的帮助!