【问题标题】:'object' does not contain a definition for <property> in asp.net core 3.1在 asp.net core 3.1 中,“对象”不包含 <property> 的定义
【发布时间】: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


【解决方案1】:
var expando = StaticFunctions.ToExpando(dict);
return PartialView("_RoundsPartial", dict);

您的意思是传入expando 而不是dict

扩展方法对我有用:

public static System.Dynamic.ExpandoObject ToExpandoObject(this object obj)
{
    IDictionary<string, object> expando = new ExpandoObject();
    foreach (PropertyDescriptor property in TypeDescriptor.GetProperties(obj.GetType()))
    {
        expando.Add(property.Name, property.GetValue(obj));
    }
    return (ExpandoObject)expando;
}

...但我得到了同样的错误“对象不包含定义”

【讨论】:

  • 哦,是的@tim 我打算将 expando 传递给 PV,但我正在运行代码并且它一直崩溃所以我绕过它 - 我将修改 OP - 谢谢!
  • 关于为您工作的扩展方法 - 很奇怪......我会重试 - 谢谢蒂姆。 PS 我觉得我是世界上唯一一个无法将 IDict 转换为 expando 的人,因为我阅读的每篇文章似乎都在这样做......
  • 请注意,上面的代码与我添加的链接中的代码略有不同 - IDictionary&lt;string, object&gt; expando = new ExpandoObject(); vs,。 IDictionary expando = new ExpandoObject(); 在链接中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-05-18
  • 1970-01-01
  • 1970-01-01
  • 2019-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多