日期字段会显示时间

时间:2017-11-27 09:55:08

标签: asp.net-mvc datetime

我有一个非常讨厌的问题,我无法抽出时间停止出现在日期时间字段中。

我从此表单发送数据:

@using (Html.BeginForm("Progress","Order",FormMethod.Post))
{
    <input name="Deadline" type="hidden" value="@Model.Deadline" />
    <input name="StatusDescription" type="hidden" value="@Model.StatusDescription" />
    <input name="Progress" type="hidden" value="@Model.Progress" />
    <input type="submit" value="progress" class="btn btn-default" />
}

控制器

public ActionResult Progress(ViewOrderViewModel viewModel)
{
    return View(viewModel);
}

进度表

<div class="form-group">
    @Html.LabelFor(model => model.Deadline, htmlAttributes: new { @class = "control-label col-md-2" })
    <div class="col-xs-6 col-md-3">
        @Html.EditorFor(model => model.Deadline, new { htmlAttributes = new { @class = "form-control deadlineDatepicker", placeholder = Html.DisplayNameFor(model => model.Deadline) } })
    </div>
</div>

视图模型

[Display(Name="Deadline")]
[DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)]
public DateTime Deadline { get; set; }

这让我很疯狂,因为我已经用我的订单编辑表单做了类似的事情并且工作正常,但我不得不在那里手动构建模型,这似乎毫无意义。如何在没有时间的情况下在进度表单中显示日期?

  • 我尝试添加DataType.Date注释,但这会强制使用默认的浏览器日期选择器,因为我使用的是JQuery UI datepicker。

  • 我尝试将字段更改为@Html.EditorFor(model => model.Deadline.ToString("dd/mm/yyyy"),但我得到了

      

    模板只能用于字段访问,属性访问,单维数组索引或单参数自定义索引器表达式。

  • 我也试过@Html.EditorFor(model => model.Deadline.Date,但它仍然显示时间。

  • 即使在表单上添加@value=@Model.DateTime.ToString("dd\mm\yyyy")属性后,它也无济于事......事实上,以这种方式设置值似乎无所作为。

  • 我将字段更改为@Html.TextBoxFor(model => model.Deadline, "{0:dd-MM-yyyy}", new { @class = "form-control deadlineDatepicker", placeholder = Html.DisplayNameFor(model => model.Deadline)} ),但时间仍然显示。这毫无意义

有人可以帮助我解释为什么这么困难吗?

1 个答案:

答案 0 :(得分:0)

<强>更新

似乎问题与数据发送到控制器的方式有关。

将隐藏日期字段更改为

<input name="Deadline" type="hidden" value="@Model.Deadline.ToShortDateString()" />

现在工作正常。

一旦它到达Progress控制器后检查实际值,我注意到1个差异,即时间值只是从

改变了
TimeOfDay   {12:00:00}  System.TimeSpan

TimeOfDay   {00:00:00}  System.TimeSpan

因此,使用ToShortDateString()传递时间会导致接收方法将其处理为时间为00:00:00,无论出于何种原因,这意味着可以无任何时间显示日期。

如果有人能帮我理解这种行为,我真的很感激。

陈旧,不可接受的答案

虽然我讨厌这样做,但我还是试图添加这些j来克服这个极其恼人的问题

@{ 
    var dateString = Model.Deadline.ToShortDateString();
}

<script>
    function codeAddress() {
        $('.deadlineDatepicker').val('@dateString');
    }
    window.onload = codeAddress;
</script>