機能しないエディターのデータ属性。
@Html.EditorFor(model => model.SireTag, new { data_typeahead = "dsfsdfsd" })
Chrome ブラウザーを開くと、テキスト ボックスのデータ属性が表示されません。私はゴーグルを試してみましたが、有用なものは何も見つかりませんでした.
機能しないエディターのデータ属性。
@Html.EditorFor(model => model.SireTag, new { data_typeahead = "dsfsdfsd" })
Chrome ブラウザーを開くと、テキスト ボックスのデータ属性が表示されません。私はゴーグルを試してみましたが、有用なものは何も見つかりませんでした.
実際には、EditorFor を使用して、追加の HTML 属性を送信できます。このオーバーロードを使用してパラメーターを設定しadditionalViewData
ます。htmlAttributes
次のプロパティを持つオブジェクトが必要です。
@Html.EditorFor(
model => model.SireTag,
new {
htmlAttributes = new { data_typeahead = "dsfsdfsd" }
}
)
これにより、次のようなものが生成されます。
<input id="SireTag" name="SireTag" ... data-typeahead="dsfsdfsd">
の 2 番目のobject
パラメーターHtml.EditorFor
は HTML 属性用ではなく、追加のビュー データ用です。EditorFor
ヘルパーは、たとえばより具体的なヘルパーが行う方法で HTML 属性をカスタマイズすることを許可しません。<input>
設定のほとんどをモデル メタデータから取得します (例: [Attributes]
)。
「修正」する最も簡単な方法は、明らかにドロップすることEditorFor
です:
@Html.TextBoxFor(model => model.SireTag, new { data_typeahead = "dsfsdfsd" })
または、プロパティの独自の EditorTemplate を記述します。data_typeahead
これにより、元の構文を使用 (または単純化) することができますViewData["data_typeahead"]
。
さらに一歩、より高度に、独自Attribute
のモデル プロパティ + 独自のプロパティを作成してModelMetadataProvider
(または - より簡単に - を使用IMetadataAware
し、以下でさらに詳しく)、それを EditorTemplate が使用できるメタデータに変換することができます - これを削除するためにビューから完全に属性に関する決定を行いdata-
、呼び出しを次のように変えます。
@Html.EditorFor(model => model.SireTag)
...そしてあなたのモデルを次のようにします:
public class MyModel
{
[Typeahead("dsfsdfsd")]
public string SireTag { get; set; }
}
IMetadataAware を使用したこのアプローチの例:
[AttributeUsage(AttributeTargets.Property)]
public class TypeaheadAttribute : Attribute, IMetadataAware
{
private readonly string value;
public TypeaheadAttribute(string value)
{
this.value = value;
}
public void OnMetadataCreated(ModelMetadata metadata)
{
metadata.AdditionalValues["typeahead"] = value;
}
}
このメタデータ エントリは、(辞書) を使用して EditorTemplate で抽出できます。ViewContext.ViewData.ModelMetadata.AdditionalValues
結果は、たとえば に渡される属性辞書に追加されますHtml.TextBox
。