我正在使用Microsoft 的说明将 MVC3 应用程序升级到 MVC4 。一切都进行得相当顺利 - 除了我的一些日期模型属性现在呈现不同的情况。例如,这些属性之一在 viewmodel 中定义如下:
[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
- 它也没有被调用)。如果不是其中任何一个,那么我愿意接受有关如何让我的属性渲染像以前那样的建议。