从“任何”类型的对象获取视图数据?

时间:2012-01-06 19:10:10

标签: asp.net-mvc-3 c#-4.0

使用MVC3,我创建了一个通用的局部视图,它以IList为模型,然后根据列表中包含的第一个对象的ModelMetaData创建一个表。到目前为止,我可以获取对象中每个“东西”的显示名称,但我无法枚举对象中的实际字段/数据。这是我尝试过的:

@model System.Collections.IList

@if (this.Model.IsNullOrEmpty())
{
    <p>No items found.</p>
}
else
{
    <table>
        <thead>
    @{
        ViewDataDictionary<object> viewData = new ViewDataDictionary<object>();
        ModelMetadata metadata = ModelMetadata.FromLambdaExpression<object, object>(m => this.Model[0], viewData);

        foreach (var property in metadata.Properties)
        {
            <th>@property.DisplayName</th>
        }
    }
        </thead>
        <tbody>
    @foreach (var item in this.Model)
    {
        ViewDataDictionary<object> itemData = new ViewDataDictionary<object>(item);

            <tr>
        @foreach (var data in itemData)
        {
                <td>@data</td>
        }
            </tr>
    }
        </tbody>
    </table>
}

创建行的循环有效,但ViewData中没有任何内容。想法?

1 个答案:

答案 0 :(得分:1)

您可以使用RouteValueDictionary:

@foreach (var item in this.Model)
{
    RouteValueDictionary itemData = new RouteValueDictionary(item);
    <tr>
    @foreach (var data in itemData)
    {
        <td>@data.Value</td>
    }
    </tr>
}