我在使用TextBoxFor<,>(表达式,htmlAttributes)将DateTime的唯一日期部分显示为文本框时遇到了麻烦。

该模型基于Linq2SQL,字段是SQL和实体模型中的DateTime。

失败:

<%= Html.TextBoxFor(model => model.dtArrivalDate, String.Format("{0:dd/MM/yyyy}", Model.dtArrivalDate))%>

这个技巧似乎被贬低了,htmlAttribute对象中的任何字符串值都被忽略了。

失败:

[DisplayFormat( DataFormatString = "{0:dd/MM/yyyy}" )]
public string dtArrivalDate { get; set; }

我想在详细信息/编辑视图上只存储和显示日期部分,而没有“00:00:00”部分。


当前回答

请记住,展示取决于文化。虽然在大多数情况下,其他答案都是正确的,但它对我不起作用。文化问题也会导致不同的问题与jQuery datepicker,如果附加。

如果您希望以以下方式强制格式转义/:

@Html.TextBoxFor(model => model.dtArrivalDate, "{0:MM\\/dd\\/yyyy}")

如果我没有逃脱,它显示08-01-2010比预期的08/01/2010。

另外,如果没有转义jQuery datepicker将选择不同的defaultDate,在我的实例中,它是2012年5月10日。

其他回答

只需在模型旁边添加。

[DataType(DataType.Date)]
public string dtArrivalDate { get; set; }

不要害怕使用原始HTML。

<input type="text" value="<%= Html.Encode(Model.SomeDate.ToShortDateString()) %>" />

如果你坚持使用[DisplayFormat],但你没有使用MVC4,你可以使用这个:

@Html.TextBoxFor(m => m.EndDate, new { Value = @Html.DisplayFor(m=>m.EndDate), @class="datepicker" })

您可以使用下面的代码以HH:mm格式打印时间,在我的情况下,属性类型是TimeSpan 所以值是HH:mm:tt格式,但我必须显示在上面的格式,即。HH: mm

所以你可以使用下面的代码:

@Html.TextBoxFor(x =>x.mTimeFrom, null, new {@Value =Model.mTimeFrom.ToString().Substring(0,5), @class = "form-control success" })

你也可以通过应用这个数据注释来使用HTML 5属性:

[DataType(DataType.Date)]

但问题是,这为HTML 5浏览器启用了特定于浏览器的日期选择器。对于不支持日期选择器的浏览器,您仍然需要自己的日期选择器,然后您必须确保您的日期选择器不会在浏览器的日期选择器之外出现(Modernizr可以轻松地做到这一点),或者隐藏浏览器的日期选择器(很复杂,我不知道我看到的方法有多可靠)。

最后我选择了Alex的,因为我目前的环境没有Modernizr,但是如果有的话,如果浏览器还不支持的话,我就会有条件地使用它来显示我的数据选择器。