2011-08-16 97 views
0

我正在創建一個只顯示模型類的幾個字段的對象模板,用作對象的摘要。我創建了一個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 

} 

這是我的對象模板:

@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> 
} 

回答

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

+0

謝謝,屬性是我的,所以這應該沒有問題。我愛MVC順便!與AutoMapper相結合,我幾乎所希望的ASP.NET就像很長一段時間。 – AaronLS

相關問題