【问题标题】:Custom EditorTemplate not being used in MVC4 for DataType.Date自定义 EditorTemplate 未在 MVC4 中用于 DataType.Date
【发布时间】:2012-12-18 01:47:20
【问题描述】:

我正在使用 instructions from Microsoft 将 MVC3 应用程序升级到 MVC4。一切都进行得相当顺利 - 除了我的一些日期模型属性现在呈现不同的情况。例如,这些属性之一在视图模型中定义如下:

[Required(ErrorMessage = "Required")]
[DataType(DataType.Date)]
[RegularExpression(@"([1-9]|0[1-9]|1[012])...",
    ErrorMessage = "Format is mm/dd/yyyy")]
[FormatHint("mm/dd/yyyy")]
[InputSize("small")]
public string Date { get; set; }

在升级到 MVC4 之前,这将通过调用 @Html.EditorFor(m => m.Date) 来呈现,这将使用自定义 EditorTemplate - String.cshtml 模板(因为它是一个字符串!)。我有一些自定义数据注释来格式化 html,因此它在客户端使用字段布局、jQueryUI 和 twitter Bootstrap。验证是通过不显眼的 jquery 验证完成的。无论如何,这就是它之前的渲染方式:

现在我正在使用 MVC4,不再为此属性调用 String.cshtml 编辑器模板。它呈现如下(我假设在 Chrome 中使用 HTML5 编辑器):

input 元素看起来几乎相同 - 所有 jQuery 验证位都在其中 - 唯一的区别似乎是 type 属性现在是 type="date",之前是 type="text"

我想继续为此数据类型使用String.cshtml EditorTemplate。我在想可能有一个数据注释可以放在 ViewModel 属性上,以便为@Html.EditorFor(...) 提供一个模板提示。如果不是这样,我想知道我可以编写的自定义 EditorTemplate 来劫持 MVC4 的格式(我已经尝试过 DateTime.cshtml - 它也没有被调用)。如果不是其中任何一个,那么我愿意接受有关如何让我的属性呈现像以前那样的建议。

【问题讨论】:

  • 看起来你的第二张照片显示了datepicker() 被两个不同的用户界面调用了两次,你确定datepicker() 的重复调用吗?顺便说一句,我在 MVC4 中使用来自 jQueryUI 的 datepicker 没有任何问题。

标签: asp.net-mvc asp.net-mvc-4


【解决方案1】:

MVC4 中,使用的模板由:

  1. UIHintAttribute(如果有)
  2. DataTypeAttribute(如果有)
  3. 属性的类型

MVC3 中,未使用DataTypeAttribute

您的财产有一个

[DataType(DataType.Date)]

所以使用模板Date.cshtml。如果不存在,则执行默认渲染。

您有两种选择来解决您的问题:

  1. 在您的资源上添加UIHint("String"),或
  2. 将编辑器模板从 String.cshtml 重命名为 Date.cshtml

【讨论】:

  • 你救了我的命。 “您的属性具有 [DataType(DataType.Date)],因此使用模板 Date.cshtml。”
  • 谢谢,DataType(DataType.Date)UIHint("String") 的组合帮助我实现了没有 html5 日期选择器的 jquery 日期选择器。
猜你喜欢
  • 1970-01-01
  • 2013-10-20
  • 1970-01-01
  • 1970-01-01
  • 2014-04-24
  • 1970-01-01
  • 2019-02-03
  • 1970-01-01
  • 2016-11-30
相关资源
最近更新 更多