2012-12-18 75 views
4

我正在使用instructions from Microsoft将MVC3应用程序升级到MVC4。一切都相当顺利 - 除了我的一些日期模型属性现在呈现不同。例如,其中一个属性在视图模型的定义是这样的:自定义编辑器模板未在MVC4中用于DataType.Date

[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验证完成,不显眼。总之,这是它以前的呈现方式:

date editor

现在,我使用MVC4,该String.cshtml编辑模板不会被调用该物业的任何更长的时间。它使得像这样(在使用Chrome的HTML5编辑器的东西,我假设):

date editor mvc4

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

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

+0

这似乎是你的第二张图所示'datepicker()'用两个不同的UI调用两次,你确定'datepicker()'重复调用吗?顺便说一下,我在MVC4中从jQueryUI中使用'datepicker'没有任何问题。 – Saeid

回答

13

MVC4,所使用的模板是从determinated:

  1. UIHintAttribute如果任何
  2. DataTypeAttribute如果任何
  3. 的类型属性

MVC3,将DataTypeAttribute的没有被使用。

你的酒店有

[DataType(DataType.Date)] 

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

您有两个选项来解决问题:

  1. 你的财产添加UIHint("String"),或者
  2. 重命名从String.cshtml编辑器模板Date.cshtml
+4

你救了我的命。 “您的财产有一个 [DataType(DataType.Date)] 所以模板Date.cshtml被使用。” – Dmitrij

+0

是赢家,帮助我呢! – Aaron

+0

谢谢你,'DataType(DataType.Date)'和'UIHint(“String”)'的组合帮助我实现了没有html5 datepicker的jquery datepicker。 – kttii

相关问题