【问题标题】:MVC TextBoxFor type "date" is it possible to use custom format?MVC TextBoxFor 类型“日期”是否可以使用自定义格式?
【发布时间】: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")] 用于DateTime viewmodel 属性。
  • 同意@TetsuyaYamamoto。我们可以将 DisplayFormat 属性放在 EndDate 属性的 ViewModel 中
  • 听起来DefaultModelBinder 正在搞乱DateTime 输入的日期格式。您可以尝试使用herehere 提供的指定格式创建自定义模型绑定器。
  • 当您添加 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


【解决方案1】:

所以我们设法让 JQuery 在我们当前的项目中工作,我们必须重新排序和构建已经存在的 javascript 引用,但这实际上是一件好事,因为我们清理了一些东西:)。我们按照Stephen Muecke 的建议使用了JQuery DatePicker(再次感谢您提供的所有信息),也感谢Tetsuya,因为我对 DefaultModelBinder 一无所知,现在我知道的更多:)。像往常一样,我学到了一些新东西,谢谢!

【讨论】:

    猜你喜欢
    • 2021-01-15
    • 1970-01-01
    • 2017-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多