仅来自TextBoxFor()的date

我无法使用TextBoxFor <,>(expression,htmlAttributes)将date时间的唯一date部分显示到文本框中。

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

失败:

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

这个技巧似乎被折旧了,对象htmlAttribute中的任何string值都被忽略。

失败:

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

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

 [DisplayName("Start Date")] [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:yyyy-MM-dd}")] public DateTime StartDate { get; set; } 

然后:

 <%=Html.EditorFor(m => m.StartDate) %> 

MVC4已经通过添加一个新的TextBoxFor重载来解决这个问题,该重载需要一个string格式参数。 你现在可以简单地做到这一点:

 @Html.TextBoxFor(m => m.EndDate, "{0:d MMM yyyy}") 

还有一个重载HTML属性,所以你可以设置CSS类,连接dateselect器等:

 @Html.TextBoxFor(m => m.EndDate, "{0:d MMM yyyy}", new { @class="input-large" }) 
 <%= Html.TextBoxFor(model => model.EndDate, new { @class = "jquery_datepicker", @Value = Model.EndDate.ToString("dd.MM.yyyy") })%> 

或者使用无types的帮助者:

 <%= Html.TextBox("StartDate", string.Format("{0:d}", Model.StartDate)) %> 

这对我有效。

 @Html.TextBoxFor(m => m.DateOfBirth, "{0:MM/dd/yyyy}", new { size = "12", @class = "DOB", tabindex = 121 }) 

不要害怕使用原始的HTML。

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

您也可以通过应用此数据注释来使用HTML 5属性:

 [DataType(DataType.Date)] 

但问题是这使浏览器特定的dateselect器的HTML 5浏览器。 你仍然需要自己的浏览器dateselect器没有支持,然后你必须确保你的dateselect器除了浏览器(Modernizr可以轻松做到这一点),或隐藏浏览器的,如果它确实(复杂和我不知道我看到的是多么可靠的方法)。

最后,我和Alex一起去了,因为我现在的环境没有Modernizr,但是如果是这样的话,如果浏览器不支持,我会用条件的方式显示我的数据select器。

对我来说,我需要保留TextboxFor()因为使用EditorFor()将inputtypes更改为date。 在Chrome中,它添加了一个内置的dateselect器,这使得我已经使用的jQuery datepicker搞砸了。 所以,要继续使用TextboxFor()并只输出date,你可以这样做:

 <tr> <td class="Label">@Html.LabelFor(model => model.DeliveryDate)</td> @{ string deliveryDate = Model.DeliveryDate.ToShortDateString(); } <td>@Html.TextBoxFor(model => model.DeliveryDate, new { @Value = deliveryDate }) *</td> <td style="color: red;">@Html.ValidationMessageFor(model => model.DeliveryDate)</td> </tr> 

在初始加载时,DisplayFormat属性在任何forms下都不适用于我。 我创build了一个EditorTemplate:

 <%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<System.DateTime>" %> <%@ Import Namespace="System.Web.Mvc.Html" %> <%= Html.TextBox("", Model.ToShortDateString(), new { @class = "date-range" }) %> 

模板编辑器将仅用于显示目的。 如果您使用相同的编辑器(这是合理的,因为它是一个编辑器),并提供了像31/01/2010的值 – 你会得到一个错误消息说格式是无效的。

// datimetime显示在datePicker是11/24/2011 12:00:00 AM

//你可以通过空格分隔这个值,并且只将值设置为date

脚本:

  if ($("#StartDate").val() != '') { var arrDate = $('#StartDate').val().split(" "); $('#StartDate').val(arrDate[0]); } 

标记:

  <div class="editor-field"> @Html.LabelFor(model => model.StartDate, "Start Date") @Html.TextBoxFor(model => model.StartDate, new { @class = "date-picker-needed" }) </div> 

希望这有助于..

当然你可以使用Html.EditorFor。 但是如果你想使用TextBoxFor并使用DisplayFormat属性的格式,你可以这样使用它:

 @Html.TextBoxFor(model => model.dtArrivalDate, ModelMetadata.FromLambdaExpression(model => model.dtArrivalDate, ViewData).EditFormatString) 

或者创build下一个扩展:

 public static class HtmlExtensions { public static MvcHtmlString TextBoxWithFormatFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression, object htmlAttributes) { return htmlHelper.TextBoxFor(expression, ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData).EditFormatString, htmlAttributes); } } 

只需添加到您的模型旁边。

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

在ASP.NET Core中使用标签助手时,格式需要以ISO格式指定。 如果没有指定,绑定的input数据将无法正确显示,并显示为毫米/日/年,没有值。

模型:

 [Display(Name = "Hire")] [DataType(DataType.Date)] [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:yyyy-MM-dd}")] public DateTime? HireDate { get; set; } 

视图:

 <input asp-for="Entity.HireDate" class="form-control" /> 

格式也可以在视图中使用asp-format属性指定。

生成的HTML将如下所示:

 <input class="form-control" type="date" id="Entity_HireDate" name="Entity.HireDate" value="2012-01-01"> 

我使用全球化,所以使用许多date格式,所以使用以下内容:

 @Html.TextBoxFor(m => m.DateOfBirth, "{0:d}") 

这会自动将date格式调整为浏览器的区域设置。

请记住,展示将取决于文化。 在大多数情况下,所有其他答案都是正确的,但对我来说并不合适。 文化问题也会导致与jQuery datepicker不同的问题,如果附加。

如果你想强制格式转义/以下列方式:

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

如果没有逃脱,我会显示08-01-2010预期08/01/2010

另外,如果不逃避jQuery datepicker将select不同的defaultDate,在我的例子是May 10, 2012May 10, 2012