4

Microsoft の指示に従って、MVC3 アプリケーションを MVC4 にアップグレードしています。私の日付モデルのプロパティのいくつかが異なってレンダリングされていることを除いて、すべてがかなりスムーズに進みました。たとえば、これらのプロパティの 1 つは、ビューモデルで次のように定義されます。

[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テンプレート (文字列であるため!) を使用する呼び出しによってレンダリングされます。クライアント側でフィールド レイアウト、jQueryUI、および twitter Bootstrap を利用するように、html をフォーマットするカスタム データ注釈がいくつかあります。検証は目立たない jquery 検証を介して行われます。とにかく、これは以前にレンダリングされた方法です:

日付エディター

MVC4 を使用するようになったので、String.cshtmlエディター テンプレートはこのプロパティに対して呼び出されなくなりました。次のようにレンダリングされます (Chrome では HTML5 エディターを使用していると思います):

日付エディター mvc4

input要素はほとんど同じように見えます - すべての jQuery 検証ビットがそこにあります - 唯一の違いは、属性typetype="date"以前はどこにあったかtype="text"です。

String.cshtmlこのデータ型の EditorTemplateを引き続き使用したいと思います。の TemplateHint を提供するために ViewModel プロパティに付けることができるデータ注釈があるかもしれないと考えています@Html.EditorFor(...)。そうでない場合は、MVC4 の書式設定をハイジャックするために書き込むことができるカスタム EditorTemplate を知りたいです (既に試しましたDateTime.cshtmlが、どちらも呼び出されていません)。どちらでもない場合は、以前のようにプロパティをレンダリングする方法についての提案を受け付けています。

4

1 に答える 1

14

ではMVC4、使用されるテンプレートは次のように決定されます。

  1. もしUIHintAttributeあれば
  2. もしDataTypeAttributeあれば
  3. プロパティのタイプ

ではMVC3DataTypeAttributeは使用されませんでした。

あなたの物件には

[DataType(DataType.Date)]

したがって、テンプレートDate.cshtmlが使用されます。存在しない場合は、デフォルトのレンダリングが実行されます。

問題を解決するには、次の 2 つのオプションがあります。

  1. UIHint("String")プロパティにを追加するか、
  2. エディタ テンプレートの名前を からString.cshtmlに変更しますDate.cshtml
于 2013-01-18T14:48:50.877 に答える