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


// 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 行:"对象"不包含"计数"的定义

为什么?我能做什么?

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

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

有关更多信息,请参阅此处。

不能肯定地说,因为我从不使用动态,但我怀疑这是剃刀视图引擎不支持的情况。尽管您可以拥有一个动态模型并直接调用其属性。

例如,以下作品:

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

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

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

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

与其使用动态,我建议您定义几个类型并使用强类型。

相关内容

  • 没有找到相关文章

最新更新