我有一个非常讨厌的问题,我无法抽出时间停止出现在日期时间字段中。
我从此表单发送数据:
@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)} )
,但时间仍然显示。这毫无意义
有人可以帮助我解释为什么这么困难吗?
答案 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>