【发布时间】:2020-03-18 04:09:58
【问题描述】:
这个问题有两个部分
第 1 号:
我收到了与这篇文章相同的问题
唯一的区别是我在 asp.net core v3.1 中运行
Dynamic Anonymous type in Razor causes RuntimeBinderException
我尝试了 expando 解决方案
但我仍然得到'对象'不包含'myproperty'的定义错误
这是我的代码
在控制器中:
var obj = new { newRoundNumber = maxround + 1 };
IDictionary<string, object> dict = new ExpandoObject();
dict.Add("p", obj);
var expando = StaticFunctions.ToExpando(dict);
return PartialView("_RoundsPartial", expando);
在部分视图中:
@{
var p = Model.p;
var newRound = p.newRoundNumber; <--- fails
for (var r = 1; r <= newRound; r++)
{
<div>@r</div>
}
}
谁能告诉我怎么了?
2号:
显然这曾经有效
new{
Project = projectInfo,
WorkItem = workitem
}.ToExpando());
但不再在 asp.net core v3.1 中
它允许的转换是 ToString()
有人知道 asp.net core 中的等价物吗?
更新:
有评论回复试试这个链接:
https://sebnilsson.com/blog/convert-c-anonymous-or-any-types-into-dynamic-expandoobject/
简而言之:
using System.Dynamic;
public static ExpandoObject ToExpandoObject(this object obj)
{
IDictionary expando = new ExpandoObject();
foreach (PropertyDescriptor property in
TypeDescriptor.GetProperties(obj.GetType()))
{
expando.Add(property.Name, property.GetValue(obj));
}
return (ExpandoObject) expando;
}
目前这行返回错误:
IDictionary expando = new ExpandoObject();
与:
无法将 ExpandoObject 类型隐式转换为 IDictionary
反之亦然
【问题讨论】:
-
@TimWilliams 感谢回复 - 是的,我看到了那个博客并尝试过 - 它没有用 - 我会在帖子中注明
标签: asp.net-core partial-views expandoobject anonymous-objects