2013-08-11 8 views
9

データが正しく動作しないための属性。mvcのhtmlエディタを使用したデータ属性

@Html.EditorFor(model => model.SireTag, new { data_typeahead = "dsfsdfsd" }) 

クロームブラウザを開くと、テキストボックスのデータ属性が表示されません。 私はゴーグルを試みましたが、有用なものは見つかりませんでした。

答えて

11

Html.EditorForの2番目のobjectパラメータは、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; } 
} 

Example of this approach using IMetadataAware

+0

感謝を...素晴らしい.... –

+1

このソリューションは動作しますが、@MarosDimitrio HTML属性を受け入れる 'EditorFor'メソッドのオーバーロードを投稿しました。 –

13

実際にはです。 EditorForを使用して、追加のHTML属性を送信してください。このoverloadを使用し、additionalViewDataのパラメータを設定します。それはhtmlAttributesプロパティを持つオブジェクトを期待:

@Html.EditorFor(
    model => model.SireTag, 
    new { 
     htmlAttributes = new { data_typeahead = "dsfsdfsd" } 
    } 
) 

このようなものが生成されます。その論理的およびソリューションが動作するたくさん

<input id="SireTag" name="SireTag" ... data-typeahead="dsfsdfsd"> 
+1

これは間違いなく答えになるはずです。 –

関連する問題