2011-04-06 38 views
0
// 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行: '對象' 不包含定義爲 '計數'

爲什麼?我能做什麼?

回答

2

匿名類型被編譯成內部類。

dynamic所使用的標準粘合劑僅對公共成員的公共成員有約束力。
因此,您不能將它與來自其他程序集的匿名類型一起使用。

欲瞭解更多信息,請參閱here

0

不能說肯定,因爲我從來沒有使用動態,但我懷疑這是一個不被剃刀視圖引擎支持的情況。雖然你可以有一個動態模型並直接調用它的屬性。

例如以下工作:

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

,但如果我們進入到這個一些靜態方法在別處:

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

它不再工程,我懷疑剃刀自動轉換爲對象。

而不是使用動態我會建議你定義幾個類型和強類型的工作。

+0

該錯誤與剃刀本身無關。 – SLaks 2011-04-06 15:38:59

+0

@SLaks,正確,你的回答很好地解釋了它。感謝您指出了這一點。這清除了我的困惑。我會更新我的答案,只保留不使用動態的相關部分。 – 2011-04-06 15:51:06