Asp.net mvc 仅从TextBoxFor()的日期
我在使用TextBoxFor(expression,htmlAttributes)将DateTime的唯一日期部分显示到文本框中时遇到问题 该模型基于Linq2SQL,字段是SQL和实体模型中的日期时间 失败:Asp.net mvc 仅从TextBoxFor()的日期,asp.net-mvc,Asp.net Mvc,我在使用TextBoxFor(expression,htmlAttributes)将DateTime的唯一日期部分显示到文本框中时遇到问题 该模型基于Linq2SQL,字段是SQL和实体模型中的日期时间 失败: <%= Html.TextBoxFor(model => model.dtArrivalDate, String.Format("{0:dd/MM/yyyy}", Model.dtArrivalDate))%> [DisplayFormat( DataFormatSt
<%= Html.TextBoxFor(model => model.dtArrivalDate, String.Format("{0:dd/MM/yyyy}", Model.dtArrivalDate))%>
[DisplayFormat( DataFormatString = "{0:dd/MM/yyyy}" )]
public string dtArrivalDate { get; set; }
public DateTime DOB { get; set; }
@Html.TextBoxFor(m => m.DOB,"{0:yyyy-MM-dd}", new { type = "date" })
我只想在“详细信息/编辑”视图中存储和显示日期部分,而不存储“00:00:00”部分。不要害怕使用原始HTML
<input type="text" value="<%= Html.Encode(Model.SomeDate.ToShortDateString()) %>" />
或使用非类型帮助程序:
<%= Html.TextBox("StartDate", string.Format("{0:d}", Model.StartDate)) %>
然后:
m.StartDate)%>
初始加载时,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" }) %>
模板编辑器仅用于显示目的。 如果您使用同一个编辑器(这很有意义,因为它是一个编辑器),并且您提供了一个类似2010年1月31日的值-您将收到一条错误消息,说明格式无效。
model.EndDate,new{@class=“jquery\u datepicker”,@value=model.EndDate.ToString(“dd.MM.yyyy”)}>
<%= Html.TextBoxFor(model => model.EndDate, new { @class = "jquery_datepicker", @Value = Model.EndDate.ToString("dd.MM.yyyy") })%>
//日期选择器中显示的日期时间为2011年11月24日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.LabelFor(model=>model.StartDate,“开始日期”)
@TextBoxFor(model=>model.StartDate,新的{@class=“需要日期选择器”})
希望这有帮助。您也可以通过应用此数据注释来使用HTML 5属性:
[DataType(DataType.Date)]
但问题是,这为HTML5浏览器启用了特定于浏览器的日期选择器。在没有支持的情况下,您仍然需要自己的浏览器日期选择器,然后您必须确保您的日期选择器不会出现在浏览器之外(Modernizer可以很容易地做到这一点),或者隐藏浏览器的日期选择器(复杂,我不知道我看到的方法有多可靠)
最后,我选择了Alex的,因为我当前的环境没有Modernizer,但如果有,我会使用它来有条件地只显示我的数据选择器,如果浏览器不支持的话。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" })
对我来说,我需要保留
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>
@LabelFor(model=>model.DeliveryDate)
@{
string deliveryDate=Model.deliveryDate.ToShortDateString();
}
@Html.TextBoxFor(model=>model.DeliveryDate,新的{@Value=DeliveryDate})*
@Html.ValidationMessageFor(model=>model.DeliveryDate)
确保可以使用Html.EditorFor。
但是,如果要使用TextBoxFor并使用DisplayFormat属性中的format,可以通过以下方式使用它:
@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);
}
}
public静态类
{
公共静态MvcHtmlString TextBoxWithFormatFor(此HtmlHelper HtmlHelper、表达式、对象htmlAttributes)
{
返回htmlHelper.TextBoxFor(表达式,ModelMetadata.FromLambdaExpression(表达式,htmlHelper.ViewData).EditFormatString,htmlAttributes);
}
}
只需在模型旁边添加
[DataType(DataType.Date)]
public string dtArrivalDate { get; set; }
这对我有用
@Html.TextBoxFor(m => m.DateOfBirth, "{0:MM/dd/yyyy}", new { size = "12", @class = "DOB", tabindex = 121 })
在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; }
视图:
也可以使用asp格式属性在视图中指定格式
生成的HTML将如下所示:
<input class="form-control" type="date" id="Entity_HireDate"
name="Entity.HireDate" value="2012-01-01">
我使用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,在我的实例中,它是2012年5月10日如果您使用的是引导式日期选择器,那么您只需添加数据日期格式属性,如下所示
@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"
})
您可以使用下面的代码以HH:mm格式打印时间,在我的情况下属性类型是TimeSpan 因此,值以HH:mm:tt格式出现,但我必须以上述格式显示,即HH:mm 因此,您可以使用以下代码:
TL;博士强>
@Html.TextBoxFor(m => m.DOB,"{0:yyyy-MM-dd}", new { type = "date" })
应用[DisplayFormat(ApplyFormatInEditMode=true,DataFormatString=“{0:yyyy-MM-dd}”)]
对我来说不起作用
说明:
<%= Html.TextBoxFor(model => model.dtArrivalDate, String.Format("{0:dd/MM/yyyy}", Model.dtArrivalDate))%>
[DisplayFormat( DataFormatString = "{0:dd/MM/yyyy}" )]
public string dtArrivalDate { get; set; }
public DateTime DOB { get; set; }
@Html.TextBoxFor(m => m.DOB,"{0:yyyy-MM-dd}", new { type = "date" })
类型为date
的htmlinput
元素的日期必须针对进行格式化,即:yyyy-MM-dd
显示的日期根据用户浏览器的区域设置进行格式化,
但解析后的值的格式始终为yyyy-mm-dd
我的经验是,语言不是由Accept language
标题决定的,而是由浏览器显示语言或操作系统语言决定的
要使用Html.TextBoxFor
显示模型的日期属性:
模型类的日期属性:
<%= Html.TextBoxFor(model => model.dtArrivalDate, String.Format("{0:dd/MM/yyyy}", Model.dtArrivalDate))%>
[DisplayFormat( DataFormatString = "{0:dd/MM/yyyy}" )]
public string dtArrivalDate { get; set; }
public DateTime DOB { get; set; }
@Html.TextBoxFor(m => m.DOB,"{0:yyyy-MM-dd}", new { type = "date" })
模型方面不需要其他任何东西
在剃须刀中您需要:
<%= Html.TextBoxFor(model => model.dtArrivalDate, String.Format("{0:dd/MM/yyyy}", Model.dtArrivalDate))%>
[DisplayFormat( DataFormatString = "{0:dd/MM/yyyy}" )]
public string dtArrivalDate { get; set; }
public DateTime DOB { get; set; }
@Html.TextBoxFor(m => m.DOB,"{0:yyyy-MM-dd}", new { type = "date" })