2011-06-22 15 views

cevap

68

MVC HTML yardımcıları, kullandığınızda Ayrıca her DOM öğesinin kimliği otomatik ayarlanması gerekir muhtemelen yine kullanıyor olacak bir TagBuilder ile:

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

Bu ASP.NET MVC kaynak kodu kendisinde yapılabilir görebilirsiniz; Daha basit örneklerden biri TextAreaExtensions.cs.

DÜZENLEME: Düzgün, "data_attr" dan "veri attr" dönüştürmek AnonymousObjectToHtmlAttributes statik yöntemini kullanmak için

.

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

Sadece bunu data_bind özniteliği ile dener ve çıktı data_bind olarak beklenen, data-bind olarak - herhangi bir fikir? – SimonGates

+0

Ne yazık ki, Url to TextAreaExtensions artık geçerli değil :) Sadece bilmeni istiyorum. – slawek

+0

@slawek teşekkürler, bulabildiğim en yakın şeyle sabitlenmiş. – Domenic

21

: HTML işaretleme içine gömmek için böyle dizeye attrs dönüştürmek için nasıl

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

bir dizeye dönüştürmeye gerek yoktur. HTML Yardımcıları için son paramater bir Nesne. Bir tarafta 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}) 

için

muhtemelen HTML ile stilleri directy inline ayarı gerektiğine dikkat ediniz ve bunun yerine bir CSS sınıf/seçiciyi kullanabilirsiniz: Sen yukarıda yazdım gibi sadece o nesneyi vermek ayrı bir stil sayfası ile.

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

Sonra birlikte bu sözlüğü kullanabilirsiniz: Eğer RouteValueDictionary sınıfı tarafından sağlanan Bu işlevsellik yeterince şaşırtıcı olduğunu

+1

Biliyorum, ama ek olarak, başka bir form bileşeni oluşturmak için kendi yöntemimi yazmak istiyorum, bu yüzden MVC 3 yaptım gibi bir yola ihtiyacım var :) –

+0

np sorusu içinde – Daveo

+0

Sorunuzda bahsetmiş olmalısınız Bunu hatırla :) –

5

İşte bu dönüşümü nasıl yapılacağı açıklanmıştır:

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

Bunun neden önerilen bir yanıt olmadığı hakkında bir fikriniz yok. – radpin

+0

kod önemli bir değişiklikle tamam: HttpUtility kullanın.Özellik değerini işlemek için HtmlAttributeEncode. – Liviu

+0

ayrıca x_y x-y etiket adlarını da dönüştürür. TagBuilder böyle yapar. – Liviu

İlgili konular