仅来自TextBoxFor()的日期

Kro*_*nos 266 asp.net-mvc

我无法使用TextBoxFor <,>(表达式,htmlAttributes)将DateTime的唯一日期部分显示到文本框中.

该模型基于Linq2SQL,字段是SQL上的DateTime和实体模型.

失败:

<%= Html.TextBoxFor(model => model.dtArrivalDate, String.Format("{0:dd/MM/yyyy}", Model.dtArrivalDate))%>
Run Code Online (Sandbox Code Playgroud)

这个技巧似乎被折旧了,对象htmlAttribute中的任何字符串值都被忽略了.

失败:

[DisplayFormat( DataFormatString = "{0:dd/MM/yyyy}" )]
public string dtArrivalDate { get; set; }
Run Code Online (Sandbox Code Playgroud)

我想在详细信息/编辑视图中存储和显示日期部分,而不是"00:00:00"部分.

Ros*_*Nab 356

MVC4通过添加一个新的TextBoxFor重载来解决这个问题,该重载采用字符串格式参数.你现在可以简单地这样做:

@Html.TextBoxFor(m => m.EndDate, "{0:d MMM yyyy}")
Run Code Online (Sandbox Code Playgroud)

还有一个带有html属性的重载,所以你可以设置CSS类,连接datepickers等:

@Html.TextBoxFor(m => m.EndDate, "{0:d MMM yyyy}", new { @class="input-large" })
Run Code Online (Sandbox Code Playgroud)

  • 这是MVC4的最佳答案 - 它允许我使用jquery UI datepicker并将选择格式化为:`@ Html.TextBoxFor(m => m.SomeDate,"{0:MM/dd/yyyy}",new { @ id ="datepicker"})` (40认同)
  • 我把它设置为`@ Html.TextBoxFor(model => model.CDate,"{0:dd.MM.yyyy}")`但是在httpPost上我获得了像MM.dd.yyyy这样的数据.怎么解决这个? (7认同)
  • 谢谢!但是TextBoxFor似乎忽略了模型的`[DisplayFormat]`属性.很高兴在TextBoxFor中至少有一个覆盖(并且你提醒我了). (3认同)
  • 我给你买啤酒!在我找到这个答案之前,这个小问题让我很头疼. (2认同)
  • **供您参考:[许多浏览器](https://weblog.west-wind.com/posts/2012/nov/08/html5-input-typedate-formatting-issues)和[`input [type = date ]`规范](https://www.w3.org/TR/html-markup/input.date.html)要求格式为“ {0:yyyy-MM-dd}”。 (2认同)

小智 259

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

  • 关于空值,DateTime的默认值是1901年1月1日,在我看来,最好使用`@Value =(Model.DateBecamePermanentResident == null?"":Model.DateBecamePermanentResident.Value.ToString("dd. MM.yyyy"))` (15认同)
  • EditorFor解决方案有效,除非您需要覆盖其他HTML属性,如id或class.这是一个很好的解决方案.奇怪的是V必须是大写的. (5认同)
  • @Spikolynn,这没有为我生成第二个“Value”属性(MVC3/razor 模板)。 (2认同)
  • 重要提示:在"价值"中检查资本"V",小写字母不会! (2认同)

小智 232

[DisplayName("Start Date")]
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:yyyy-MM-dd}")]
public DateTime StartDate { get; set; }
Run Code Online (Sandbox Code Playgroud)

然后:

<%=Html.EditorFor(m => m.StartDate) %>
Run Code Online (Sandbox Code Playgroud)

  • 但是现在Jquery UI datepicker不能应用于此输入,因为它忽略了我为Html.EditorFor()帮助程序指定的@ class ="datepicker"属性.因此,此文本框现在可以正确格式化,但在单击时不会启动日期选择器.所以它固定了一件事并打破了另一件事. (66认同)
  • 我使用MVC4 Razor语法,日期字段呈现为`@Html.EditorFor(m => m.IssueDate)`,模型上的格式应用为`[DisplayFormat(DataFormatString ="{0:dd/MM/yyyy}")]`但是日期仍显示为`01/01/0001 12:00:00 AM` (47认同)
  • 如何让它与此解决方案一起显示,还可以像使用Html.TextboxFor()一样启动datepicker (5认同)
  • @Aaron没有带有htmlAttributes参数的EditorFor重载.你可能会把它传递给viewTemplate参数或其他东西,以为你传递了htmlAttributes.这是Editorfor的缺点.TextBoxFor忽略DisplayFormat注释.Alexeyss的解决方案以不同的方式应用格式来解决这个问题. (4认同)

and*_*myr 48

或者使用无类型的帮助者:

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

  • 轻微的变化`@Html.TextBoxFor(model => model.EndDate,"{0:d}",new {type ="date"})` (21认同)

小智 26

这对我有用.

@Html.TextBoxFor(m => m.DateOfBirth, "{0:MM/dd/yyyy}", new { size = "12", @class = "DOB", tabindex = 121 })
Run Code Online (Sandbox Code Playgroud)


Leg*_*nds 15

TL; 博士;

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

申请[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:yyyy-MM-dd}")]对我没用!


解释:

input类型的 html元素的日期date必须根据ISO8601进行格式化,即:yyyy-MM-dd

显示的日期根据用户浏览器的区域设置格式,但解析的值始终格式为 yyyy-mm-dd。

我的经验是,语言不是由Accept-Language标题决定的,而是由浏览器显示语言或操作系统系统语言决定的。

为了使用以下方法显示模型的日期属性Html.TextBoxFor

在此处输入图片说明

您的模型类的日期属性:

public DateTime DOB { get; set; }
Run Code Online (Sandbox Code Playgroud)

模型方面不需要其他任何东西。


在 Razor 中,您可以:

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

  • 小事,最后缺少花括号 (2认同)

Tam*_*ege 13

不要害怕使用原始HTML.

<input type="text" value="<%= Html.Encode(Model.SomeDate.ToShortDateString()) %>" />
Run Code Online (Sandbox Code Playgroud)

  • 只要您包含正确的'name ="StartDate"',模型绑定器就会选择它. (10认同)
  • 那他怎么发布呢?因为几乎肯定不会在服务器上解析日期. (4认同)