10

Razorビューエンジンを使用するMVC3Webアプリがあります。デフォルトのエディターテンプレートを拡張したいので、inputのような要素にHTML5属性を追加したいと思いますautofocus

AdditionalMetadataAttributeオートフォーカスするエンティティの特定のプロパティを指定するために使用しています。

public class MyEntity
{
    public int Id { get; set; }

    [Required]
    [AdditionalMetadata("autofocus", true)]
    [DataType(DataType.Text)]
    public string Name { get; set; }

    ...
}

ビュースキャフォールディングはメソッドを使用するため、一緒にプレイすることにし、デフォルトのString.cshtmlEditorForテンプレートをオーバーライドして、属性として追加のメタデータも追加するようにしました。一緒にプレイするということは、入力の属性を制御できる場所を使用したくないということです。TextBoxFor

これは、入力HTML属性としてすべての追加のメタデータ属性を追加するString.cshtmlを少し変更したものです。

@{
    // System.Diagnostics.Debugger.Break();
    this.ViewData.ModelMetadata.AdditionalValues.Add("class", "text-box single-line");
}
@Html.TextBox(string.Empty, ViewContext.ViewData.TemplateInfo.FormattedModelValue, this.ViewData.ModelMetadata.AdditionalValues)

このテンプレートは、同じCSSクラスで同じようにレンダリングする必要がありますinput type=textが、属性が提供されている場合は追加の属性も使用します。

次に、このファイルを〜/ Views / Shared / EditorTemplates /フォルダーに配置しましたが、取得するのはデフォルトの入力テキストボックスだけであるため、このテンプレートは取得されないようです。

私は何が間違っているのですか?

4

1 に答える 1

15

エディター テンプレートは、モデル プロパティを装飾するために使用しString.cshtmlた次の属性によるものではありません。[DataType(DataType.Text)]

これは~/Views/Shared/EditorTemplates/Text.cshtmlテンプレートを使用します。

于 2012-02-04T20:59:07.250 に答える