C# 在ASP.NET MVC中使用ExpandoObject时出错

C# 在ASP.NET MVC中使用ExpandoObject时出错,c#,expandoobject,C#,Expandoobject,我有一个ASP.NETMVC应用程序。我正在我的应用程序中使用ExpandoObject。目前,我的.cshtml文件中有以下块: foreach (System.Dynamic.ExpandoObject expo in ViewBag.ExpandoObjects) { <div>@filter.GetType().FullName</div> } foreach (System.Dynamic.ExpandoObject expo in ViewBag.E

我有一个ASP.NETMVC应用程序。我正在我的应用程序中使用
ExpandoObject
。目前,我的.cshtml文件中有以下块:

foreach (System.Dynamic.ExpandoObject expo in ViewBag.ExpandoObjects)
{
  <div>@filter.GetType().FullName</div>
}  
foreach (System.Dynamic.ExpandoObject expo in ViewBag.ExpandoObjects)
{
  foreach (var key in expo.Keys) 
  {
    <div>@key</div>
  }
}                  
错误显示:

foreach (System.Dynamic.ExpandoObject expo in ViewBag.ExpandoObjects)
{
  foreach (var key in expo.Keys) 
  {
    <div>@key</div>
  }
}                  
CS1061: 'System.Dynamic.ExpandoObject' does not contain a definition for 'Keys' and no extension method 'Keys' accepting a first argument of type 'System.Dynamic.ExpandoObject' could be found (are you missing a using directive or an assembly reference?)      

我不明白为什么我会犯这个错误。根据文件,有一个。我缺少什么?

IDictionary
接口显式实现了
Keys
属性。例如,这不会编译:

foreach (System.Dynamic.ExpandoObject expo in ViewBag.ExpandoObjects)
{
  foreach (var key in expo.Keys) 
  {
    <div>@key</div>
  }
}                  
Console.WriteLine(new ExpandoObject().Keys);
如果要使用
,则必须将其转换为
IDictionary

foreach (System.Dynamic.ExpandoObject expo in ViewBag.ExpandoObjects)
{
  foreach (var key in expo.Keys) 
  {
    <div>@key</div>
  }
}                  
foreach (System.Dynamic.ExpandoObject expo in ViewBag.ExpandoObjects)
{
  foreach (var key in ((IDictionary<string, object>)expo).Keys) 
  {
    <div>@key</div>
  }
}  

foreach (System.Dynamic.ExpandoObject expo in ViewBag.ExpandoObjects)
{
  foreach (var key in expo.Keys) 
  {
    <div>@key</div>
  }
}                  

请注意,我强烈建议您尽可能使用强类型视图模型<代码>动态键入有助于实现其功能,但如果使用过度,则会扼杀可维护性。

当我这样做时,我会在列表中看到“name”。但是,如果我说
@expo.name
我会得到一个错误,它说
CS1061:“System.Dynamic.ExpandoObject”不包含“name”的定义,并且找不到接受“System.Dynamic.ExpandoObject”类型的第一个参数的扩展方法“name”
。我不明白。如何从
ExpandoObject
@xamdeveloper中获取属性值:如果要将其视为动态对象,则需要将其强制转换为
动态
foreach (System.Dynamic.ExpandoObject expo in ViewBag.ExpandoObjects)
{
  foreach (var key in expo.Keys) 
  {
    <div>@key</div>
  }
}