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 /フォルダーに配置しましたが、取得するのはデフォルトの入力テキストボックスだけであるため、このテンプレートは取得されないようです。