代码之家  ›  专栏  ›  技术社区  ›  devuxer

ASP.NET MVC:访问集合中项目的ModelMetadata

  •  7
  • devuxer  · 技术社区  · 15 年前

    我正在尝试为索引视图编写一个自动架子工。我希望能够传递一组模型或视图模型(例如, IEnumerable<MyViewModel> )然后返回一个使用 DisplayName 标题的属性( th 元素) Html.Display(propertyName) 对于细胞而言( td 元素)。每行应对应于集合中的一个项。

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

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

    1 回复  |  直到 15 年前
        1
  •  6
  •   Darin Dimitrov    15 年前

    一个简单的扩展方法可以完成以下工作:

    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) %>