【发布时间】:2018-10-08 13:36:04
【问题描述】:
我有一个问题/疑问,我想将 DateTime 类型的模型属性绑定到日期类型的 TextBoxFor,实际上是否可以使用以下格式来显示现有日期:dd/MM/yyyy ?
我尝试了以下Stackoverflow post,但我只设法显示日期为 "{0:yyyy-MM-dd}" 格式。我知道默认格式取决于浏览器,例如英语浏览器将呈现 mm/dd/yyyy 和荷兰语浏览器 dd/mm/yyyy。如何将模型中的现有日期显示为 dd/mm/yyyy 格式的哪种类型的控件?
我尝试在模型中使用注释设置这种所需的格式,在我的视图中以及在我的控制器中,但没有成功。我也尝试使用 EditorFor,但是当我单击它时会删除 DatePicker 功能,换句话说,我不再有日期选择器了 :) 我也尝试了 TextBox(...) 但同样的问题。
这是我的观点:
@Html.TextBoxFor(c => c.Contract.EndDate, new { Value = @Model.Contract.EndDate.ToString("dd/MM/yyyy"), @class = "form-control", @type = "date" })
有人可以建议我这样做的最佳方式吗? 亲切的问候!
【问题讨论】:
-
有可能。但是使用
new { Value = @Model.Contract.EndDate.ToString("dd/MM/yyyy"), ... }不是正确的方法。您可以将[DisplayFormat(DateFormatString = "dd/MM/yyyy")]用于DateTimeviewmodel 属性。 -
同意@TetsuyaYamamoto。我们可以将 DisplayFormat 属性放在 EndDate 属性的 ViewModel 中
-
当您添加
type="date"时,它会生成浏览器 HTML5 日期选择器,其目的是在用户文化中显示日期,而不是您的文化(如果我导航到该网站,我会看到它dd/MM/yyyy格式(澳大利亚),但美国用户会以MM/dd/yyyy格式看到它。如果您想要定义格式的日期选择器,请使用 jQuery 日期选择器,而不是 HTML5 日期选择器(无论如何,许多旧浏览器都不支持它). 另外,在使用HtmlHelper方法时,切勿设置value属性。 -
@Dimitri。 HTML5 日期选择器在 IE 中不受支持,仅在最新版本的 FireFox 中(我认为大约 6 个月)。
HtmlHelper首先使用ModelState,然后是ViewDataDictionary,最后是实际模型值,从而正确生成value。阅读this answer 的第二部分,了解自己设置value的问题之一
标签: asp.net-mvc input datepicker datetime-format html5-input-date