0

这个问题有两个部分

数字 1:
我收到了与这篇文章相同的问题,
唯一的区别是我在 asp.net core v3.1 中运行
Razor 中的动态匿名类型导致 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();

with:
不能将 ExpandoObject 类型隐式转换为 IDictionary

反之亦然

4

1 回答 1

0
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;
}

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

于 2020-03-20T06:04:25.213 回答