在ASPNET MVC Razor View中获取IQueryable对象项

时间:2017-04-09 16:15:26

标签: c# asp.net-mvc razor

Source是Dynamic Linq Select返回的非强类型IQueryable。 因此在View中我有:

enter image description here

由于它们没有强类型,我无法访问(并正确显示)对象codename_en(请注意我使用动态linq选择的原因是列名从select到select选择)。 我尝试按索引item[0], item[1]访问值,但我收到Cannot apply indexing with [] to an expression of type 'object'错误。

2 个答案:

答案 0 :(得分:1)

如果您已经了解属性名称,可以使用属性名称

item.GetType().GetProperty("code").GetValue(item);

或者只使用更多反射并渲染此对象具有的所有属性。

@foreach (var item in Model)
{
    <tr>
        @{
            var type = item.GetType();
            var props = type.GetProperties();
            foreach (var p in props)
            {
                <td>
                    @p.Name
                </td>
                <td>
                    @type.GetProperty(p.Name).GetValue(item);
                </td>
            }
        }
    </tr>
}

当然,您可以遍历所有属性,然后只检查并排除一些您不想呈现的属性,如Id或其他私有数据。

答案 1 :(得分:0)

如果要保持Model类不变,可以在视图中使用动态对象:

@foreach (dynamic item in Model.languageTable)
{
    <tr>
        <td>@item.code</td>
        <td>@item.name_en</td>
    </tr>
}