Asp.net mvc 仅从TextBoxFor()的日期

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

我在使用TextBoxFor(expression,htmlAttributes)将DateTime的唯一日期部分显示到文本框中时遇到问题

该模型基于Linq2SQL,字段是SQL和实体模型中的日期时间

失败:

<%= 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
的html
input
元素的日期必须针对进行格式化,即:
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" })