我正在创建一个对象模板,它只显示模型类的几个字段,用作对象的摘要。我创建了一个Summary属性,并使用该属性标记了某些字段。我无法弄清楚如何实际确定属性是否具有该属性,因为在对象模板中我没有实际属性,而是具有ModelMetadata。 如何确定属性是否在对象模板中具有“摘要”属性?
public class Car
{
[Key]
public int CarKey { get; set;}
[Summary]
public string Color { get; set;}
public string EngineSize { get; set;}
[Summary]
public string Model { get; set;}
public int NumberOfDoors
}
这是我的对象templatE:
@if (Model == null) {
<text>@ViewData.ModelMetadata.NullDisplayText</text>
} else if (ViewData.TemplateInfo.TemplateDepth > 1) {
<text>@ViewData.ModelMetadata.SimpleDisplayText</text>
} else {
<table cellpadding="0" cellspacing="0" border="0">
@foreach (var prop in ViewData.ModelMetadata.Properties.Where(pm => pm.ShowForDisplay && !ViewData.TemplateInfo.Visited(pm))) {
if(prop./******************** what goes here ************************/
if (prop.HideSurroundingHtml) {
<text>@Html.Display(prop.PropertyName)</text>
} else {
<tr>
<td>
<div class="display-label" style="text-align: right;">
@prop.GetDisplayName()
</div>
</td>
<td>
<div class="display-field">
@Html.Display(prop.PropertyName)
</div>
</td>
</tr>
}
}
</table>
}
答案 0 :(得分:1)
实现目标的最佳方法是将SummaryAttribute
更改为实施IMetadataAware
。这是一种可扩展性机制,允许元数据属性向ModelMetadata
对象提供其他信息:
public void OnMetadataCreated(ModelMetadata metadata) {
if (metadata == null) {
throw new ArgumentNullException("metadata");
}
metadata.AdditionalValues["Summary"] = true;
}
然后你的财产检查可能是
if(prop.AdditionalValues.ContainsKey("Summary"))
如果您无法更改SummaryAttribute
的实施或从中获取,那么您可以考虑使用内置的AdditionalMetadataAttribute