2015-11-05 32 views
5

İçinde jilet görünümü Benuygulanması css sınıfı kullanılarak Html.DisplayFor

@Html.LabelFor(model => model.MyName, htmlAttributes: new { @class = "control-label col-md-6" }) 

gibi etiket oluşturma için bir model kullandık ve şimdi bunun yerine veri açıklama attr değeridir kullanmak istiyorum. değeri bu yüzden bu css sınıfı control-label col-md-6 uygulamak değildir

@Html.DisplayFor(model => model.MyName, new { @class = "control-label col-md-6" }) 

gibi DisplayFor ile çalıştı. Neden? Diğer *For yardımcıları gibi çalışmaz

+0

http://stackoverflow.com/questions/11655810/how-do-i-edit-the-css-of- -html-displayfor-method-in-mvc-3 – AAlferez

cevap

9

. EditorFor gibi, "templated helper" olarak adlandırılan şey. Başka bir deyişle, işledikleri, değiştirilebilen bir şablon tarafından kontrol edilir. Önemli olarak, bu yöntemlerin her ikisi için de, belgelerine MSDN'de bakarsanız, normal olan parametrenin, diğer yardımcılarla htmlAttributes'a karşılık geldiğini görürsünüz, bunun yerine bu ikisi ile birlikte additionalViewData'u belirtir. Bunun nedeni, yine, çıkışlarının, esas olarak ViewData alan görünümleri tarafından denetlenmesidir. Ayrıca, DisplayFor özellikle, varsayılan şablonlar hemen hemen hiç HTML olmadan, değeri çıkarırlar. Örneğin bir string özelliğini iletirseniz, çıktı bu dizenin değeri ve başka hiçbir şey değildir. Bu nedenle, HTML özniteliklerini bağlayabilmeniz için hiçbir şey yoktur, bunları iletseniz bile.

Yapmaya çalıştığınız şeyi yapmak istiyorsanız, özel ekran şablonları oluşturmanız gerekir. Bu types adını incelemeler ekleyerek yapılabilir (örneğin String, Boolean, Byte vs.) ya da DataType enum (CreditCard, EmailAddress vs.) üyeleri Views\Shared\DisplayTemplates için. Örneğin, Views\Shared\DisplayTemplates\String.cshtml'da bir görünüm oluşturduysanız, string türünde bir özelliği olan DisplayFor aradığınızda, bu görünüm onu ​​oluşturmak için kullanılabilir. Daha sonra, aksi takdirde seçtiğiniz bazı HTML'de doğrudan çıkacak değeri sarın ve uygun HTML niteliklerini uygulamak için ViewData'u kullanın. Örneğin:

<span class="@ViewData["class"]">@ViewData.TemplateInfo.FormattedModelValue</span> 
13

fark bunun yerine düz metin kılan, @Html.LabelFor yardımcı işlevi <label></label> etiketi işler ve @Html.DisplayFor yardımcı fonksiyon herhangi bir html etiketi hale olmamasıdır. Örneğin aşağıdaki kod:

@Html.DisplayFor(model => model.MyName, new { @class = "control-label col-md-6" }) 

ham metni döndürür:

Martin 

MyName değerini "Martin" olduğunu düşünen. Ve kod:

@Html.LabelFor(model => model.MyName, htmlAttributes: new { @class = "control-label col-md-6" }) 

döndürür:

<label class="control-label col-md-6">Martin</label> 

farkı düşünün.

kullanın (eğer @ Html.DisplayFor kullanmak istiyorsanız) Aşağıdaki:

<span class"control-label col-md-6">@Html.DisplayFor(model => model.MyName)</span> 
+1

ihtiyacı = orada. @ Html.DisplayFor (model => model.MyName) coder771

+1

Bunun doğru olduğunu düşünmüyorum - LabelFor özelliği "Martin" değerini değil, mülkün * adını * döndürmez mi? – msulis