этот вопрос состоит из двух частей
номер 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
и наоборот с возвращением