Blazor组件继承自BaseClass



我即将为我的Razor组件创建一个基类。这个基类看起来像:

public abstract class ExampleBase : ComponentBase 
{
public virtual void Submit()
{
//DoSomething
}
public virtual void Back()
{
//DoSomething else
}
}

我的Blazor组件继承自此类

@inherits ExampleBase
<button @onclick="Submit" />

到目前为止还不错,但当我启动我的应用程序,这个页面即将加载时,我收到一个异常:

〔2020-09-29T12:09:03.920Z〕错误:System.ArgumentException:组件类型必须实现Microsoft.AspNetCore.Components.IComponent。在Microsoft.AspNetCore.Components.Rendering.RenderTreeBuilder.OpenComponent(Int32序列,类型componentType(

从ComponentBase继承有什么问题?

感谢您的帮助

添加:我像这样调用我的Razor组件,并且异常向生成器抛出。OpenComponent

RenderFragment CreateFragment() => builder =>
{
builder.OpenComponent(0, typeof(MyRazorComponent));
builder.CloseComponent();
}

希望这能帮助

首先,感谢大家的帮助,我真的很感激!

休息了几个小时之后我发现了自己的错误

我正在做的是:我创建了一个服务,它加载了一个类型列表,这个服务被注入到Razor组件中。

服务代码:

//this returns a listOfRazorComponents
return AppDomain.CurrentDomain.GetAssemblies()
.Where(x => x.FullName.StartsWith("SampleApplication")).FirstOrDefault()
.DefinedTypes.Where(x=>x.BaseType is ComponentBase);

在我的Razor组件中,我显示了服务返回的RazorComponent列表。

@page "/"
@inject MyService myService

@CurrentFragment
@code{
private RenderFragment CurrentFragment { get; set; }
private List<TypeInfo> listOfRazorComponents;

protected override void OnInitialized
{
listOfRazorComponents = new List<TypeInfo>(myService.GetRazorComponents());
CreateFragment(listOfRazorComponents[0]);
}
RenderFragment CreateFragment(Type typeToDisplay) => builder =>
{
builder.OpenComponent(0, typeToDisplay);
builder.CloseComponent();
};
}

现在我犯了一个愚蠢的错误。。。在我将@inherits ExampleBase添加到我的所有Razor组件后,组件没有被我的";MyService";因为我在那里查了

x=>x.BaseType is ComponentBase 

这导致Razor组件列表为空,当我调用CreateFragment(Type typeToDisplay)时,typeToDisplay为null。

我真的不明白builder.OpenComponent(0, null)为什么不抛出NullReferenceException。让我很困惑

我自己犯了这样一个愚蠢的错误,让我很紧张。。。希望这能防止其他人忘记这一点:(

对我来说,这只是csproj设置中的一个简单错误。我的剃刀组件没有将构建操作设置为"内容",而是设置为"无"。您可以看到,当您选择项目中的文件和人民币->属性。

不确定为什么会发生这种情况,因为我用"Add->剃刀组件…'但我正在与其他可能有同样问题的人分享这一点。

此外,它编译得很好,所以它让我措手不及

相关内容

  • 没有找到相关文章

最新更新