我在使用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”部分。
// datePicker中的datatimetime显示为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>
希望这能有所帮助。
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" })
当然你可以使用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);
}
}
在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">
请记住,展示取决于文化。虽然在大多数情况下,其他答案都是正确的,但它对我不起作用。文化问题也会导致不同的问题与jQuery datepicker,如果附加。
如果您希望以以下方式强制格式转义/:
@Html.TextBoxFor(model => model.dtArrivalDate, "{0:MM\\/dd\\/yyyy}")
如果我没有逃脱,它显示08-01-2010比预期的08/01/2010。
另外,如果没有转义jQuery datepicker将选择不同的defaultDate,在我的实例中,它是2012年5月10日。
TL; diana;
@Html.TextBoxFor(m => m.DOB,"{0:yyyy-MM-dd}", new { type = "date" })
应用[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:yyyy-MM-dd}")]没有为我工作!
解释:
date类型的html输入元素的日期必须按照ISO8601进行格式化,即:yyyy-MM-dd
显示的日期是基于用户浏览器的语言环境格式化的,
但是解析后的值总是格式为yyyy-mm-dd。
我的经验是,语言不是由Accept-Language报头决定的,而是由浏览器显示语言或OS系统语言决定的。
为了使用Html显示模型的日期属性。TextBoxFor:
模型类的Date属性:
public DateTime DOB { get; set; }
在模型端不需要其他任何东西。
在Razor中,你可以:
@Html.TextBoxFor(m => m.DOB,"{0:yyyy-MM-dd}", new { type = "date" })