Source是Dynamic Linq Select返回的非强类型IQueryable。 因此在View中我有:
由于它们没有强类型,我无法访问(并正确显示)对象code
和name_en
(请注意我使用动态linq选择的原因是列名从select到select选择)。
我尝试按索引item[0], item[1]
访问值,但我收到Cannot apply indexing with [] to an expression of type 'object'
错误。
答案 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>
}