我无法使用 TextBoxFor<,>(expression, 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”部分。
MVC4 通过添加一个新的 TextBoxFor
重载解决了这个问题,该重载采用字符串格式参数。您现在可以简单地执行此操作:
@Html.TextBoxFor(m => m.EndDate, "{0:d MMM yyyy}")
还有一个采用 html 属性的重载,因此您可以设置 CSS 类、连接日期选择器等:
@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") })%>
@Value = (Model.DateBecamePermanentResident == null ? "" : Model.DateBecamePermanentResident.Value.ToString("dd.MM.yyyy"))
[DisplayName("Start Date")]
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:yyyy-MM-dd}")]
public DateTime StartDate { get; set; }
然后:
<%=Html.EditorFor(m => m.StartDate) %>
@Html.EditorFor(m => m.IssueDate)
,模型上的格式应用为 [DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}" )]
,但日期仍显示为 01/01/0001 12:00:00 AM
或者使用无类型的助手:
<%= Html.TextBox("StartDate", string.Format("{0:d}", Model.StartDate)) %>
@Html.TextBoxFor(model => model.EndDate, "{0:d}", new { type = "date" })
这对我有用。
@Html.TextBoxFor(m => m.DateOfBirth, "{0:MM/dd/yyyy}", new { size = "12", @class = "DOB", tabindex = 121 })
TL;博士;
@Html.TextBoxFor(m => m.DOB,"{0:yyyy-MM-dd}", new { type = "date" })
申请 [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:yyyy-MM-dd}")]
对我没有用!
解释:
date
类型的 html input
元素的日期必须针对 ISO8601 进行格式化,即:yyyy-MM-dd
显示的日期是根据用户浏览器的区域设置格式的,但解析的值总是格式为 yyyy-mm-dd。
我的经验是,语言不是由 Accept-Language
标头决定的,而是由浏览器显示语言或操作系统系统语言决定的。
为了使用 Html.TextBoxFor
显示模型的日期属性:
https://i.stack.imgur.com/m2HPP.png
您的模型类的日期属性:
public DateTime DOB { get; set; }
模型方面不需要其他任何东西。
在 Razor 中,您可以:
@Html.TextBoxFor(m => m.DOB,"{0:yyyy-MM-dd}", new { type = "date" })
不要害怕使用原始 HTML。
<input type="text" value="<%= Html.Encode(Model.SomeDate.ToShortDateString()) %>" />
TextBoxFor
或 EditorFor
格式值。请参阅我的问题:TextBoxFor helper mixes day and month in dates
您还可以通过应用此数据注释来使用 HTML 5 属性:
[DataType(DataType.Date)]
但问题是这为 HTML 5 浏览器启用了特定于浏览器的日期选择器。对于没有支持的浏览器,您仍然需要自己的日期选择器,然后您必须确保您的日期选择器不会出现在浏览器之外(Modernizr 可以轻松做到这一点),或者如果出现则隐藏浏览器(复杂而且我不知道我看到的方法有多可靠)。
最后我选择了 Alex 的,因为我当前的环境没有 Modernizr,但如果有,我会使用它来有条件地仅在浏览器不支持时显示我的数据选择器。
对我来说,我需要保留 TextboxFor()
,因为使用 EditorFor()
会将输入类型更改为日期。其中,在 Chrome 中,添加了一个内置的日期选择器,它搞砸了我已经在使用的 jQuery 日期选择器。因此,要继续使用 TextboxFor()
并且只输出日期,您可以这样做:
<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>
我使用 Globalize,因此可以使用多种日期格式,因此请使用以下内容:
@Html.TextBoxFor(m => m.DateOfBirth, "{0:d}")
这将根据浏览器的区域设置自动调整日期格式。
请记住,展示将取决于文化。虽然在大多数情况下所有其他答案都是正确的,但它对我不起作用。如果附加了 jQuery datepicker,文化问题也会导致不同的问题。
如果您希望通过以下方式强制格式转义 /
:
@Html.TextBoxFor(model => model.dtArrivalDate, "{0:MM\\/dd\\/yyyy}")
如果没有为我转义,它会显示 08-01-2010
与预期的 08/01/2010
。
此外,如果没有转义 jQuery datepicker 将选择不同的 defaultDate,在我的实例中它是 May 10, 2012
。
在初始加载时,DisplayFormat 属性在任何一种形式中都不适用于我。我创建了一个 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 的值 - 您将收到一条错误消息,指出格式无效。
如果您使用的是 Bootstrap 日期选择器,那么您只需添加 data_date_format 属性,如下所示。
@Html.TextBoxFor(m => m.StartDate, new {
@id = "your-id", @class = "datepicker form-control input-datepicker", placeholder = "dd/mm/yyyy", data_date_format = "dd/mm/yyyy"
})
// datePicker 中显示的日期时间是 11/24/2011 12:00:00 AM
// 你可以用空格分割它并将值设置为仅日期
脚本:
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)
或创建下一个扩展:
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 格式指定格式。如果没有这样指定,绑定的输入数据将无法正确显示,并将显示为 mm/dd/yyyy 且没有值。
模型:
[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">
您可以使用下面的代码以 HH:mm 格式打印时间,在我的情况下,属性类型是 TimeSpan 所以该值以 HH:mm:tt 格式出现,但我必须以上述格式显示,即。高:毫米
所以你可以使用这个代码:
@Html.TextBoxFor(x =>x.mTimeFrom, null, new {@Value =Model.mTimeFrom.ToString().Substring(0,5), @class = "form-control success" })
如果你坚持使用 [DisplayFormat]
,但你没有使用 MVC4,你可以使用这个:
@Html.TextBoxFor(m => m.EndDate, new { Value = @Html.DisplayFor(m=>m.EndDate), @class="datepicker" })
net Razor problems DateTime
Models
public class UsuarioFecha
{
[DataType(DataType.DateTime)]
[DisplayFormat(DataFormatString = "{0:yyyy/MM/dd}", ApplyFormatInEditMode = true)]
public DateTime? dateXXX { get; set; }
}
view
@model proyect.Models.UsuarioFecha
@Html.TextBoxFor(m => m.dateXXX , new { Value = @Html.DisplayFor(m => m.dateXXX ), @class = "form-control", @type = "date" })
不定期副业成功案例分享
@Html.TextBoxFor(m => m.SomeDate, "{0:MM/dd/yyyy}", new { @id="datepicker" })
[DisplayFormat]
属性似乎是一个错误。很高兴 TextBoxFor 中至少有一个覆盖(并且您提醒了我)。@Html.TextBoxFor(model => model.CDate, "{0:dd.MM.yyyy}")
,但在 httpPost 上我得到的数据类似于 MM.dd.yyyy。如何解决这个问题?input[type=date]
spec 需要"{0:yyyy-MM-dd}"
格式。