具有默认日期的MVC4日期选择器

时间:2014-01-27 23:24:26

标签: asp.net-mvc asp.net-mvc-4 razor datepicker

我正在使用带有Razor视图引擎的MVC4。我的控制器如下:

public ActionResult Index()
{

    return View(new EmployeeIndexViewModel
    {

        ToDate = DateTime.Now

    });

}

我的视图模型如下:

public class EmployeeIndexViewModel
{
    [DataType(DataType.Date)]
    public DateTime ToDate { get; set; }
}

在我看来,我有一个简单的EditorFor()电话:

@Html.EditorFor(model => model.ToDate)

但仍然在我的日期选择器中获得默认(屏蔽)值:

Empty Date Picker

问题:

我怎样才能将今天的日期(从控制器)改为显示在这里?

3 个答案:

答案 0 :(得分:19)

我的问题不是我最初想过的jQuery或MVC4问题。它与HTML5兼容浏览器如何显示日期选择器有关。我以不正确的格式将日期传递给视图。

我将ViewModel修改为此,现在日期填充正确:

public class EmployeeIndexViewModel
{
    [DataType(DataType.Date)]
    [DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
    public DateTime ToDate { get; set; }
}

Correctly displaying date time

答案 1 :(得分:2)

您应该从jQuery级别执行此操作:

   $( ".selector" ).datepicker( "setDate", yourDate);

例如,如果您想设置今天的日期:

   $( ".selector" ).datepicker( "setDate", new Date());

您还可以尝试在视图模型类中添加DisplayFormat属性,以确保日期选择器能够正确解释您的数据格式:

public class EmployeeIndexViewModel
{
    [DataType(DataType.Date)]
    [DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
    public DateTime ToDate { get; set; }
}

答案 2 :(得分:1)

你可以设置输入或输入类型="日期" (datetimepicker)使用JQuery。

在Razor视图中

@ Html.TextBoxFor(m => m.StartedDate,new {@id =" mydate",@ type =" date",@ class ="表格-control"})

这是JS代码

   $(document).ready(function () {
        var dateNewFormat, onlyDate, today = new Date();

        dateNewFormat = today.getFullYear() + '-';
        if (today.getMonth().length == 2) {

            dateNewFormat += (today.getMonth() + 1);
        }
        else {
            dateNewFormat += '0' + (today.getMonth() + 1);
        }

        onlyDate = today.getDate();
        if (onlyDate.toString().length == 2) {

            dateNewFormat += "-" + onlyDate;
        }
        else {
            dateNewFormat += '-0' + onlyDate;
        }

        $('#mydate').val(dateNewFormat);
    });