7

我想为索引视图编写一个自动脚手架。我希望能够传递一组模型或视图模型(例如IEnumerable<MyViewModel>)并获取一个HTML表格,该表格使用DisplayName属性作为标题(th元素)和Html.Display(propertyName)作为单元格(td元素) 。每一行应该对应于集合中的一个项目。ASP.NET MVC:访问集合中的项目的ModelMetadata

当我只显示单个记录时,如在Details视图中,我使用ViewData.ModelMetadata.Properties来获取给定模型的属性列表。但是,当我传递给视图的模型是模型或视图模型对象的集合而不是模型或视图模型本身时,会发生什么?

如何获取集合中特定项目的ModelMetadata?

回答

6

一个简单的扩展方法可能做的工作:

public static class MyExtensions 
{ 
    public static ModelMetadata GetMetadata<TModel>(this TModel model) 
    { 
     return ModelMetadataProviders.Current.GetMetadataForType(null, typeof(TModel)); 
    } 
} 

而在你的看法:

<%@ Page 
    Language="C#" 
    Inherits="System.Web.Mvc.ViewPage<System.Collections.Generic.IEnumerable<MyViewModel>>" %> 

<%-- Get metadata for the first item in the model collection --%> 
<%= Html.Encode(Model.ElementAt(0).GetMetadata().ModelType) %> 
+0

这就是我需要的,谢谢! – devuxer 2010-03-14 17:00:16