Razor'da @Html'in bağlantılar, girdiler vb. İçin HTML oluşturmak gibi bir sürü düzgün şey yaptığını anlıyorum.
Ancak DisplayFor işlevini alamıyorum ...
Neden yazayım:
@Html.DisplayFor(model => model.Title)
ne zaman yazabilirim:
@Model.Title
Razor'da @Html'in bağlantılar, girdiler vb. İçin HTML oluşturmak gibi bir sürü düzgün şey yaptığını anlıyorum.
Ancak DisplayFor işlevini alamıyorum ...
Neden yazayım:
@Html.DisplayFor(model => model.Title)
ne zaman yazabilirim:
@Model.Title
Yanıtlar:
Html.DisplayFor()
özelliğin türüyle eşleşen DisplayTemplate'i oluşturur.
Eğer bulamazsa, sanırım çağırır .ToString()
.
Görüntü şablonlarını bilmiyorsanız, bunlar DisplayTemplates
bir denetleyiciyle ilişkilendirilmiş görünüm klasörünün içindeki bir klasöre yerleştirilebilecek kısmi görünümlerdir .
Misal:
Adlı bir görünüm oluşturmak ise String.cshtml
iç DisplayTemplates
(örneğin klasör görüşlerin klasörüne Home
veya Shared
) aşağıdaki kodu:
@model string
@if (string.IsNullOrEmpty(Model)) {
<strong>Null string</strong>
}
else {
@Model
}
Daha sonra @Html.DisplayFor(model => model.Title)
( Title
bir dize olduğunu varsayarak ) şablonu kullanır ve <strong>Null string</strong>
dizenin boş veya boş olduğunu gösterir.
Bence asıl yarar, kendi Görüntülü Reklamcılık Şablonlarınızı tanımlamanız veya Veri ek açıklamalarını kullanmanız olacaktır.
Örneğin, başlığınız bir tarihse,
[DisplayFormat(DataFormatString = "{0:d}")]
ve sonra her sayfada değeri tutarlı bir şekilde gösterir. Aksi takdirde, ekranı birden çok sayfada özelleştirmeniz gerekebilir. Bu yüzden düz dizeler için çok yardımcı olmaz, ancak para birimleri, tarihler, e-postalar, URL'ler vb.
Örneğin, bir e-posta adresinin düz bir dize olması yerine bir bağlantı olarak görünebilir:
<a href="mailto:@ViewData.Model">@ViewData.TemplateInfo.FormattedModelValue</a>
DisplayFor
ayrıca şablonlama için de yararlıdır. Modeliniz için bir şablon yazabilir ve böyle bir şey yapabilirsiniz:
@Html.DisplayFor(m => m)
Benzer @Html.EditorFor(m => m)
. DRY prensibi için kullanışlıdır, böylece aynı Model için aynı ekran mantığını tekrar tekrar yazmak zorunda kalmazsınız.
MVC2 şablonlarındaki bu bloga bir göz atın. MVC3 için hala çok uygulanabilir:
http://www.dalsoft.co.uk/blog/index.php/2010/04/26/mvc-2-templates/
Modelinizde Veri ek açıklaması varsa da yararlıdır. Örneğin, modeldeki özellik EmailAddress
veri ek açıklamasıyla süslenmişse , DisplayFor
bunu bir mailto:
bağlantı olarak görüntüler.
@Html.DisplayFor(m => m)
sadece basitleştirilebilir @Html.DisplayForModel()
.
Bir süre kendim için bir cevap aradıktan sonra bir şey bulabilirim. genel olarak sadece tek bir özellik için kullanıyorsak, oluşturulan HTML'nin "Kaynağı Görüntüle" yapsak bile aynı görünür.
<td>
myClassNameProperty
</td>
<td>
myClassNameProperty, This is direct from Item
</td>
Bu, aşağıdaki koddan oluşturulan HTML'dir
<td>
@Html.DisplayFor(modelItem=>item.Genre.Name)
</td>
<td>
@item.Genre.Name, This is direct from Item
</td>
Aynı zamanda şimdi bu durumda benim sınıf "Tür" için tek bir ifadede tüm özellikleri görüntülemek istiyorsanız, en azından benim yazım kaydetmek için @ Html.DisplayFor () kullanabilirsiniz
Aşağıdaki türün her özelliği için ayrı bir ifade yazmak yerine @ Html.DisplayFor (modelItem => item.Genre) yazabilirim
@item.Genre.Name
@item.Genre.Id
@item.Genre.Description
özellik sayısına bağlı olarak.