2012-12-18 109 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

相關問題