自定义EditorTemplate未在MVC4中用于DataType.Date

Jam*_*ack 4 asp.net-mvc asp.net-mvc-4

我正在使用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; }
Run Code Online (Sandbox Code Playgroud)

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

日期编辑

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

日期编辑mvc4

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

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

gen*_*ane 13

MVC4,使用的模板由以下内容确定:

  1. UIHintAttribute如有
  2. DataTypeAttribute如有
  3. 财产的类型

MVC3,DataTypeAttribute没用过.

你的房产有

[DataType(DataType.Date)]
Run Code Online (Sandbox Code Playgroud)

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

您有两种方法可以解决您的问题:

  1. UIHint("String")在您的房产上添加,或
  2. 将编辑器模板重命名String.cshtmlDate.cshtml

  • 你救了我的命."您的属性有[DataType(DataType.Date)],因此使用模板Date.cshtml." (4认同)