C# 在ASP.NET MVC中使用ExpandoObject时出错
我有一个ASP.NETMVC应用程序。我正在我的应用程序中使用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
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>
}
}