提问人:user97492 提问时间:11/11/2023 最后编辑:user97492 更新时间:11/11/2023 访问量:16
使用反射的 .NET Core 7 动态组件.NET Core 7 Dynamic Component using reflection
.NET Core 7 Dynamic Component using reflection
问:
我有一个父 .razor 组件和一个子组件,在子组件中我加载了一个带有参数的动态组件......到目前为止,一切都正常,它加载了,我可以从数据库中检索数据。我的问题是,当我单击更新按钮时,我需要在 DynamicComponentFooter1 中调用一个名为“Update”的方法。
Picture.razor (父级)
<AMS.Resources.UI.Pages.Picture.Picture_Base @ref="Picture"
DynamicComponentFooter1="@DynamicComponentFooter1" DynamicComponentFooter1Parameters="@DynamicComponentFooter1Parameters" />
[Parameter] public Type? DynamicComponentFooter1 { get; set; }
[Parameter] public Dictionary<string, object>? DynamicComponentFooter1Parameters { get; set; }
图片.razor.cs (我创建了名为Picture_Membership的动态组件)
this.DynamicComponentFooter1Parameters = new Dictionary<string, object>();
this.DynamicComponentFooter1Parameters.Add("UserCurrentClassName", "Picture_Membership");
this.DynamicComponentFooter1Parameters.Add("UserCurrentAction", "view");
this.DynamicComponentFooter1Parameters.Add("PictureID", "1");
this.DynamicComponentFooter1 = typeof(AMS.Resources.UI.Pages.Picture_Membership.Picture_Membership_Base);
到目前为止一切正常,但是当我单击父项中的“更新”按钮时,我也需要通过反射或任何其他方式调用动态控件中的“更新”方法。正常的方法是添加一个 @ref=“Picture_Membership” 标签并调用 Picture_Membership.Update();但是当我发送动态控件时,我没有看到可以添加它的方法。
更新方法是异步任务:
public async Task<bool> Update()
{
return true;
}
我没有看到可以添加@ref标签的方法,因此尝试了以下方法:
var methodInfo = this.Picture.DynamicComponentFooter1.GetMethod("Update");
Type[] typeArgs = { typeof(Task<bool>) };
var genericMethodInfo = methodInfo.MakeGenericMethod(typeArgs);
var result = genericMethodInfo.Invoke(null, new object[]{});
但是我收到以下错误:
An exception of type 'System.InvalidOperationException' occurred in System.Private.CoreLib.dll but was not handled in user code: 'System.Threading.Tasks.Task`1[System.Boolean] Update() is not a GenericMethodDefinition. MakeGenericMethod may only be called on a method for which MethodBase.IsGenericMethodDefinition is true.'
我做错了什么?
任何帮助将不胜感激:)
答: 暂无答案
评论