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


当前回答

不要害怕使用原始HTML。

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

其他回答

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

[DataType(DataType.Date)]

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

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

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

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