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


当前回答

或者使用非类型化的helper:

<%= Html.TextBox("StartDate", string.Format("{0:d}", Model.StartDate)) %>

其他回答

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

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

在初始加载时,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" }) %>

不要害怕使用原始HTML。

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

我使用Globalize,所以工作与许多日期格式,所以使用以下:

@Html.TextBoxFor(m => m.DateOfBirth, "{0:d}")

这将自动调整日期格式到浏览器的地区设置。