我无法使用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”部分。
答案 0 :(得分:350)
MVC4 通过添加新的TextBoxFor
重载来解决此问题,该重载采用字符串格式参数。你现在可以简单地这样做:
@Html.TextBoxFor(m => m.EndDate, "{0:d MMM yyyy}")
还有一个带有html属性的重载,所以你可以设置CSS类,连接datepickers等等:
@Html.TextBoxFor(m => m.EndDate, "{0:d MMM yyyy}", new { @class="input-large" })
答案 1 :(得分:258)
<%= Html.TextBoxFor(model => model.EndDate, new { @class = "jquery_datepicker", @Value = Model.EndDate.ToString("dd.MM.yyyy") })%>
答案 2 :(得分:229)
[DisplayName("Start Date")]
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:yyyy-MM-dd}")]
public DateTime StartDate { get; set; }
然后:
<%=Html.EditorFor(m => m.StartDate) %>
答案 3 :(得分:49)
或使用无类型帮助者:
<%= Html.TextBox("StartDate", string.Format("{0:d}", Model.StartDate)) %>
答案 4 :(得分:24)
这对我有用。
@Html.TextBoxFor(m => m.DateOfBirth, "{0:MM/dd/yyyy}", new { size = "12", @class = "DOB", tabindex = 121 })
答案 5 :(得分:13)
不要害怕使用原始HTML。
<input type="text" value="<%= Html.Encode(Model.SomeDate.ToShortDateString()) %>" />
答案 6 :(得分:4)
TL; DR;
@Html.TextBoxFor(m => m.DOB,"{0:yyyy-MM-dd}", new { type = "date")
应用[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:yyyy-MM-dd}")]
对我来说没有效果!
说明:
为了使用Html.TextBoxFor
显示模型的日期属性:
您的模型类别的日期属性:
public DateTime DOB { get; set; }
在模型方面,不需要任何其他操作。
在剃刀中,您可以这样做:
@Html.TextBoxFor(m => m.DOB,"{0:yyyy-MM-dd}", new { type = "date")
说明:
类型为input
的html date
元素的日期必须相对于ISO8601进行格式化,即:yyyy-MM-dd
显示的日期是根据用户浏览器的语言环境设置的格式, 但是解析后的值始终采用yyyy-mm-dd格式。
我的经验是,该语言不是由Accept-Language
标头决定的,而是由浏览器显示语言或OS系统语言决定的。
答案 7 :(得分:3)
您还可以通过应用此数据注释来使用HTML 5属性:
[DataType(DataType.Date)]
但问题是这为HTML 5浏览器启用了特定于浏览器的日期选择器。对于没有支持的浏览器,你仍然需要你自己的日期选择器,然后你必须确保你的日期选择器不会出现在浏览器之外(Modernizr可以很容易地做到这一点),或者隐藏浏览器(如果有的话)(复杂和我不知道我看到的方法有多可靠)。
最后我和Alex一起去了,因为我目前的环境没有Modernizr,但如果确实如此,我会用它来有条件地只显示我的数据选择器,如果浏览器不支持它。
答案 8 :(得分:2)
对我来说,我需要保留TextboxFor()
,因为使用EditorFor()
更改了输入类型。在Chrome中,它添加了一个内置的日期选择器,这搞砸了我已经使用的jQuery日期选择器。因此,要继续使用TextboxFor()
AND只输出日期,您可以执行以下操作:
<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>
答案 9 :(得分:1)
在初始加载时,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" }) %>
答案 10 :(得分:1)
模板编辑器仅用于显示目的。 如果您使用相同的编辑器(因为它是编辑器而有意义)并且您提供了类似31/01/2010的值 - 您将收到一条错误消息,指出格式无效。
答案 11 :(得分:1)
如果您使用的是Bootstrap日期选择器,那么您只需添加 data_date_format 属性,如下所示。
./myscript.sh lines.txt > new_file.txt
答案 12 :(得分:1)
请记住,显示取决于文化。虽然在大多数情况下所有其他答案都是正确的,但它对我不起作用。如果附加了jQuery datepicker,文化问题也会导致不同的问题。
如果您希望以下列方式强制格式转义/
:
@Html.TextBoxFor(model => model.dtArrivalDate, "{0:MM\\/dd\\/yyyy}")
如果没有为我转义,则显示08-01-2010
与预期08/01/2010
。
如果没有转义,jQuery datepicker将选择不同的defaultDate,在我的实例中它是May 10, 2012
。
答案 13 :(得分:0)
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" })
答案 14 :(得分:0)
如果您坚持使用[DisplayFormat]
,但没有使用MVC4,则可以使用以下方法:
@Html.TextBoxFor(m => m.EndDate, new { Value = @Html.DisplayFor(m=>m.EndDate), @class="datepicker" })
答案 15 :(得分:0)
您可以使用以下代码以 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" })
答案 16 :(得分:0)
我使用Globalize因此使用许多日期格式,因此请使用以下内容:
@Html.TextBoxFor(m => m.DateOfBirth, "{0:d}")
这会自动将日期格式调整为浏览器的区域设置。
答案 17 :(得分:0)
在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">
答案 18 :(得分:0)
只需在模型旁边添加。
[DataType(DataType.Date)]
public string dtArrivalDate { get; set; }
答案 19 :(得分:0)
当然可以使用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);
}
}
答案 20 :(得分:0)
// datimetime显示在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>
希望这会有所帮助..