У меня есть следующий шаблон отображения для объекта ( source ):
@model object
@if (Model == null) {
@ViewData.ModelMetadata.NullDisplayText
} else if (ViewData.TemplateInfo.TemplateDepth > 1) {
@ViewData.ModelMetadata.SimpleDisplayText
} else {
foreach (var prop in ViewData.ModelMetadata.Properties.Where(pm => pm.ShowForDisplay && !ViewData.TemplateInfo.Visited(pm))) {
if (prop.HideSurroundingHtml) {
@Html.Display(prop.PropertyName)
} else {
<div>
<strong>@prop.GetDisplayName():</strong> @Html.Display(prop.PropertyName)
</div>
}
}
}
, который прекрасно работает, пока не будет такой же ключ в ViewBag
.Например, следующий класс
public class Article {
public string Title { get; set; }
public string Text { get; set; }
}
должен отображать (и будет отображаться с пустым ViewBag)
Title: Awesome title
Text: Awesome text
, однако он показывает следующее, когда ViewBag.Title
установлен на "Detail"
Title: Detail
Text: Awesome text
Это вызвано тем, что @Html.Display(prop.PropertyName)
предпочитает значение ViewBag
значению модели.Какие-либо предложения?Я не могу использовать Html.DisplayFor
, потому что у меня есть только имя свойства, хранящееся в строковой переменной, а не как выражение для данной модели.
Я думаю, я мог бы очистить viewbag и восстановить его позже, но это не похоже нахорошее решение для меня.
Редактировать: Вид выглядит так:
@model Article
@{
ViewBag.Title = "Detail";
}
@Html.DisplayForModel()