2011-04-18 26 views
20

Görüntüleme modelimde yalnızca görüntülü bir çift özellik var ancak sayfada bir hesaplama yapmak için jQuery'yi kullanarak değerlerini almam gerekiyor. Standart Html.DisplayFor() yöntemi, yalnızca değerlerini sayfaya yazar. Ben özelliği render için değil içindeki belirli şablonu kullanmak Html.DisplayFor() bir şablon belirtebilirsiniz biliyorumDisplayFor() için bir MVC Razor şablonu nasıl oluşturabilirim?

<span id="ElementsId">Element's value</span> 

: Ben beni her elemanını işlemek sağlayacak bir jilet şablon oluşturmak istiyoruz Bu şablon kimlik özniteliğini yayına yayına nasıl yazabilirim?

@Html.DisplayFor(model => model.Element, "MyTemplate"); 

cevap

45

Tamam, buldum ve aslında çok basit. Benim Görünümler Paylaşılan \ DisplayTemplates klasörü \ ı Reading.cshtml içeren var şu:

@model System.Int32 
<span id="@ViewData.ModelMetadata.PropertyName">@Model</span> 

Bu id nitelik olarak özelliğin adını ve değerini kullanarak doğru etiketi işler içeriği gibi özelliği:

:

<span id="Reading">1234</span> 

görünümü dosyada, bu aşağıdaki kullanılarak çağrılabilir

Veyamodeli mülkiyet UIHint sonra şablon adı DisplayFor() çağrısına dışına bırakılabilir ve hala şablonu kullanarak hale getirecek ("Okuma") ile dekore ise:

@Html.DisplayFor(model => model.Reading) 

Bu, özel düzenleyici şablonları ile eşit derecede iyi çalışmalıdır.

+0

Peki, System.Int32? (Nullable int) ile nasıl başa çıkıyorsunuz? "Int32? .cshtml" –

+0

adlı başka bir görünüm oluşturamazsınız. Görüntü, Int32.cshtml değil, Reading.cshtml olarak adlandırılır. Yani, bir Int32? 'Özelliğiniz varsa,' General System.Int32? 'Ile 'WhateverPropertyIsCalled.cshtml' adlı yeni bir dosya oluşturursunuz. Yasal Uyarı: Bu gereksinimi kendim aldığını hatırlamıyorum ve bunun işe yaramadığını test etmedim. –

+3

Bunu gerçekten test ettim ve 'System.Int32? 'Modeliyle' Int32.cshtml' adlı bir dosya oluşturursanız, varsayılan şablonu geçersiz kılarsınız ve int32'nin her iki sürümünde (nullable ve null değil) alınacaktır.). –

7

Sen görünümü modelinin bu id parçası haline getirmek ve ekran şablonda kullanabilirsiniz:

<span id="@Model.Id">@Html.DisplayFor(x => x.Value)</span> 
1

Orijinal yazıyla tam olarak aynı sorunu yaşadım.

Son yorumun geçerli olduğundan emin değil. HTML id özniteliğini bir çalışma zamanı değeri yapar ve bu nedenle bir tasarım zaman adıyla başvuruda bulunamaz.

Sana veri sözlüğü (ViewBag)

Benim modelim çeşitli özelliklere sahip Projesi adlı bir C# nesne üzerine yeni nesneler eklemenizi sağlar DisplayFor aşırı yüklenmesini kullandı.

Bu StringDisplaySetHtmlID ve son parametre olarak adlandırılan özel bir şablon kullanıyor
@Html.DisplayFor(model => model.ProjectName, "StringDisplaySetHtmlID", new { HtmlID = "project-name" }) 

Viewbag için bir anahtar değer çiftini ekler: Bence bu var.

Benim şablon dosyası şöyle görünür:

@model string 
<span class = "display-field" id = "@(ViewBag.HtmlID)">@Model</span> 

Ben de stil amaçlı burada bir sınıf ayarlıyorum.Potansiyel bir ortak adlandırma çarpışmasından kaçınmak için sadece ID'den ziyade HtmlID anahtar adını kullandım.

Şimdi benim javascript aşağıdaki jquery kullanarak Kaplayıcı içeriğini alabilirsiniz:

var projectName = $('#project-name').text() 
2

Templates (Ekran + Editör) Razor içinde ve ayrıca UIHint niteliğini açıklayan an article var.

İlgili konular