日期仅来自TextBoxFor()

我在使用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”部分。

268090 次浏览

不要害怕使用原始HTML。

<input type="text" value="<%= Html.Encode(Model.SomeDate.ToShortDateString()) %>" />

或者使用非类型化的helper:

<%= Html.TextBox("StartDate", string.Format("{0:d}", Model.StartDate)) %>
[DisplayName("Start Date")]
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:yyyy-MM-dd}")]
public DateTime StartDate { get; set; }

然后:

<%=Html.EditorFor(m => 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" }) %>

模板编辑器仅用于显示。 如果你使用相同的编辑器(这是有意义的,因为它是一个编辑器)并且你提供了一个像31/01/2010这样的值-你会得到一个错误消息,说格式无效

<%= Html.TextBoxFor(model => model.EndDate, new { @class = "jquery_datepicker", @Value = Model.EndDate.ToString("dd.MM.yyyy") })%>

// 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>

希望这能有所帮助。

你也可以通过应用这个数据注释来使用HTML 5属性:

[DataType(DataType.Date)]

但问题是,这为HTML 5浏览器启用了特定于浏览器的日期选择器。对于不支持日期选择器的浏览器,您仍然需要自己的日期选择器,然后您必须确保您的日期选择器不会在浏览器的日期选择器之外出现(Modernizr可以轻松地做到这一点),或者隐藏浏览器的日期选择器(很复杂,我不知道我看到的方法有多可靠)。

最后我选择了Alex的,因为我目前的环境没有Modernizr,但是如果有的话,如果浏览器还不支持的话,我就会有条件地使用它来显示我的数据选择器。

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" })

对我来说,我需要保留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>
当然你可以使用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; }

这对我很管用。

@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; }

观点:

<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">

我使用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

如果你正在使用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"
})

你可以使用下面的代码在HH: mm格式中打印时间,在我的例子中属性类型是TimeSpan 因此,值是HH: mm: tt格式,但我必须以上述格式显示。HH: mm < / p >

所以你可以使用下面的代码:

@Html.TextBoxFor(x =>x.mTimeFrom, null, new {@Value =Model.mTimeFrom.ToString().Substring(0,5), @class = "form-control success" })

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头决定的,而是由浏览器显示语言或OS系统语言决定的。

为了使用Html.TextBoxFor显示模型的date属性:

enter image description here

模型类的Date属性:

public DateTime DOB { get; set; }

在模型端不需要其他任何东西。


在Razor中,你可以:

@Html.TextBoxFor(m => m.DOB,"{0:yyyy-MM-dd}", new { type = "date" })

如果你坚持使用[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" })