添加类型“日期”时,视图文本框中的日期为空

Lar*_*ard 3 c# asp.net asp.net-mvc razor

奇怪的问题可能非常明显。在我的视图模型中,我有一个在控制器中设置的日期。当我在视图中渲染文本框时,它是空的。

查看型号:

   [DataType(DataType.Date)]
   [DisplayFormat(DataFormatString = "{0:dd-MM-yyyy}")]
   public DateTime DateStart { get; set; }
Run Code Online (Sandbox Code Playgroud)

控制器:

    //GET: InvoicePrice
    public ActionResult Index(InvoicePriceViewModel model)
    {
        model.DateStart = DateTime.Now;
        return View(model);
    }
Run Code Online (Sandbox Code Playgroud)

视图的 HTML:

    <p>
      Date:<br />
            @Html.TextBoxFor(model => model.DateStart, new { @class = "form-control", placeholder = "Invoice date", type = "date" })
     </p>
Run Code Online (Sandbox Code Playgroud)

当我打开它时,我在这里看到空文本框:

在此输入图像描述

我希望看到“2017 年 11 月 28 日”作为我当前的日期。

我想我在这里遗漏了一些明显的东西。但它是什么?

Zab*_*sky 5

这里实际上有几个问题,我将尝试解释它们。

\n\n

第一个问题是日期输入仅接受yyyy-mm-dd格式的值并根据浏览器本地化设置显示它们:

\n\n
\n

需要注意的一件事是,显示的日期格式与实际值不同 \xe2\x80\x94 显示的日期格式将根据用户浏览器的设置区域设置进行选择,而日期值始终采用 yyyy 格式毫米-日。

\n
\n\n

这意味着您需要更改您的DataFormatString并设置ApplyFormatInEditMode为 true:

\n\n\n\n
[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]\n
Run Code Online (Sandbox Code Playgroud)\n\n

但是它仍然不会产生任何效果,因为为了考虑您的自定义格式,您需要使用Html.EditorFor

\n\n
@Html.EditorFor(model => model.DateStart,\n    new { htmlAttributes = new { @class = "form-control", placeholder = "Invoice date" } })\n
Run Code Online (Sandbox Code Playgroud)\n\n

或者您可以忽略DisplayFormatAttribute并在以下位置指定格式Html.TextBoxFor

\n\n
@Html.TextBoxFor(model => model.DateStart, "{0:yyyy-MM-dd}",\n    new { @class = "form-control", placeholder = "Invoice date", type = "date" })\n
Run Code Online (Sandbox Code Playgroud)\n