«объект» не содержит определения для <property>в asp. net ядро ​​3.1 - PullRequest
0 голосов
/ 18 марта 2020

этот вопрос состоит из двух частей

номер 1:
у меня та же проблема, что и в этом посте
единственная разница - это то, что я работаю в asp. net core v3.1
Dynami c Анонимный тип в Razor вызывает RuntimeBinderException

Я пробовал решение для расширения
, но я все еще получаю, что «объект» не содержит определение для 'myproperty' err

вот мой код
в контроллер :

        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

и наоборот с возвращением

1 Ответ

0 голосов
/ 20 марта 2020
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;
}

... но я получил та же ошибка "объект не содержит определения"

...