剃刀模板中的动态类型列表

时间:2011-04-06 14:56:14

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

// this function working perfectly
public dynamic CountTable()
{
    return (from t in db.Users
            group t by t.Type into g
            select new
            {
                type = g.Key,
                count = g.Count(),
                ActiveGroups = (from t in g group t by t.Active into ag select new { active = ag.Key, count = ag.Count() })
            }).ToList();
}

    // and this loop working in MVC Controller
    foreach (dynamic uct in ur.CountTable())
    {
        int x = uct.count;
    }

但不在模板中工作:

Line 12: @foreach (dynamic uct in ViewBag.ur.CountTable())
Line 13: {
Line 14:     int adet = uct.count;
Line 15: }

第14行:'对象'不包含'count'的定义

为什么呢?我该怎么办?

2 个答案:

答案 0 :(得分:2)

匿名类型被编译为内部类。

dynamic使用的标准绑定程序只会绑定公共成员的公共成员
因此,您不能将它与来自不同程序集的匿名类型一起使用。

有关详细信息,请参阅here

答案 1 :(得分:0)

无法确定,因为我从不使用动态,但我怀疑这是剃刀视图引擎不支持的情况。虽然您可以拥有动态模型并直接在其上调用属性。

<击>

例如以下作品:

@foreach (dynamic uct in new[] { new { Name = "foo" } })
{
    <div>@uct.Name</div>
}

但是如果我们将其移动到其他地方的静态方法中:

@foreach (dynamic uct in Foo.SomeStaticMethod())
{
    <div>@uct.Name</div>
}

它不再有效,因为我怀疑剃刀会自动转换为对象。

我建议您定义几种类型并使用强类型,而不是使用动态。