2011-06-22 15 views
40

HTML属性にオブジェクトを渡すには?たとえば 私は、次のコードを持っている:事前にオブジェクトをHTML属性に渡す

id="myid" style="color: Red;" 

感謝:)あなたが行う

+0

は、あなたが質問ありがとうございクラスに属しています!私は私の日を救った! – Sergey

答えて

68

を設定する必要があります。

IDictionary<string, object> htmlAttributes = new RouteValueDictionary(attrs); 

あなたはその後、一緒にこの辞書を使用することができますあなたはおそらくとにかく使用されますTagBuilder、と:

var tagBuilder = new TagBuilder("input"); 
tagBuilder.MergeAttributes(htmlAttributes); 
tagBuilder.ToString(TagRenderMode.Normal); 

あなたは、これはASP.NET MVCのソースコード自体で行わ見ることができます。より簡単な例の1つはTextAreaExtensions.csです。

EDIT:

AnonymousObjectToHtmlAttributes

適切に静的メソッドを使用して、 "データ・ATTR" を "data_attr" を変換するために。

IDictionary<string, object> htmlAttributes = HtmlHelper.AnonymousObjectToHtmlAttributes(attrs); 
+2

これは属性data_bindで試してみました。予想どおりのデータバインド - アイデアとは対照的に、出力はdata_bindでしたか? – SimonGates

+0

残念ながら、Url to TextAreaExtensionsは有効ではありません:)ただあなたに知らせてください。 – slawek

+0

@slawekありがとう、私が見つけることができる最も近いもので修正。 – Domenic

21

:HTMLマークアップにそれらを埋め込むために、このような文字列にattrsに変換する方法

var attrs = new { id = "myid", style = "color: Red;" }; 

文字列に変換する必要はありません。 HTMLヘルパーの最後のパラメータはObjectです。側のexmample

@Html.TextBoxFor(x => x.Foo, new { size = 10, maxlength = 10 }) 
@Html.TextAreaFor(x => x.Notes, new { @class = "additionalInfo" }) 
@Html.TextBoxFor(x=>x.Registration.Address.Postcode, new {type="number", @class="postcode numeric", size=5, maxlength=5}) 

について

あなたはおそらく、あなたのHTMLでのスタイルのdirectyをインラインで設定すべきではありません注意してください、代わりにCSSクラス/セレクターを使用します。 あなたは、あなたが上に書いたように、単にそれにオブジェクトを与えます別のスタイルシートで あなたはMVC HTMLヘルパーを使用する場合も、各DOM要素のIDが自動的にこの機能は、驚くべきことに、RouteValueDictionaryクラスによって提供され

+1

私は知っているが、加えて、別のフォームコンポーネントをレンダリングする独自のメソッドを記述したいので、MVC 3のようにする方法が必要です:) –

+0

npあなたはあなたの質問にそれを言及すべきです – Daveo

+0

ありがとう、私それを覚えて:) –

5

は、ここでは、この変換を行う方法は次のとおりです。

var htmlAttributes = new { id="myid", @class="myclass" }; 

string string_htmlAttributes = ""; 
foreach (PropertyDescriptor property in TypeDescriptor.GetProperties(htmlAttributes)) 
{ 
    string_htmlAttributes += string.Format("{0}=\"{1}\" ", property.Name.Replace('_', '-'), property.GetValue(htmlAttributes)); 
} 

PropertyDescriptorSystem.ComponentModel

+2

これは推奨された答えではない理由は考えられません。 – radpin

+0

コードは重要な変更でokです:HttpUtilityを使用してください。属性値をレンダリングするHtmlAttributeEncode。 – Liviu

+0

は、x-yのタグ名x_yも変換します。これがTagBuilderのやり方です。 – Liviu

関連する問題