.razor.cs 中的函数覆盖错误,但 .razor 中没有
function override error in .razor.cs, but not in .razor
在 blazor 项目中,我创建了一个 public class BaseComponent : Microsoft.AspNetCore.Components.ComponentBase
所以我想要一些有点复杂的组件继承自这个 class。
现在,我添加了一个错误页面,并且在覆盖函数 OnInitialized
时看到一些不一致,但似乎不仅限于该函数。
这是编译无误的Error.razor
文件:
@inherits BaseComponent
@code {
protected override void OnInitialized()
{
base.OnInitialized();
}
}
当我想将所有代码移动到 Error.razor.cs
文件时:
using WebApp.Shared;
namespace WebApp.Pages.Error
{
public partial class Error : BaseComponent
{
protected override void OnInitialized() // error is here
{
base.OnInitialized();
}
}
}
我收到一条错误消息:'Error.OnInitialized()': no suitable method found to override
。
我试过让 Error.razor.cs
部分 class 继承自 Microsoft.AspNetCore.Components.ComponentBase
而不是我的 BaseComponent
也继承了这个 class 并且有一个覆盖OnInitialized
函数本身,它不会给出任何编译错误。
所以我的问题是:
为什么.razor
文件没有编译错误,而.razor.cs
文件有编译错误?
这是一个示例基本组件和用法,您可能希望将其用作模板。
注:
- 我将基本组件设为 class 而不是剃刀组件。任何 child 几乎肯定会覆盖内容。
- 我把基数class设为
abstract
所以不能直接用
- 我已经在所有内容中设置了命名空间。
// Components/MyComponentBase.cs
namespace WhosebugAnswers.Components
{
public abstract class MyComponentBase : ComponentBase
{
[Parameter] [EditorRequired] public string Header { get; set; } = String.Empty;
[Parameter] public RenderFragment? ChildContent { get; set; }
}
}
// Components/MyDiv.razor
@namespace WhosebugAnswers.Components
@inherits MyComponentBase
<h3>@this.Header</h3>
<div class="m-2">
@this.ChildContent
</div>
// Components/MyDiv.razor.cs
namespace WhosebugAnswers.Components
{
public partial class MyDiv : MyComponentBase
{
protected override void OnInitialized()
{
base.OnInitialized();
}
}
}
以及Index.razor
中的用法
@page "/"
@page "/Index"
@using WhosebugAnswers
<PageTitle>Index</PageTitle>
<h1>Hello, world!</h1>
Welcome to your new app.
<SurveyPrompt Title="How is Blazor working for you?" />
<WhosebugAnswers.Components.MyDiv Header = "Hello Blazor">
My Div Content
</WhosebugAnswers.Components.MyDiv>
在 blazor 项目中,我创建了一个 public class BaseComponent : Microsoft.AspNetCore.Components.ComponentBase
所以我想要一些有点复杂的组件继承自这个 class。
现在,我添加了一个错误页面,并且在覆盖函数 OnInitialized
时看到一些不一致,但似乎不仅限于该函数。
这是编译无误的Error.razor
文件:
@inherits BaseComponent
@code {
protected override void OnInitialized()
{
base.OnInitialized();
}
}
当我想将所有代码移动到 Error.razor.cs
文件时:
using WebApp.Shared;
namespace WebApp.Pages.Error
{
public partial class Error : BaseComponent
{
protected override void OnInitialized() // error is here
{
base.OnInitialized();
}
}
}
我收到一条错误消息:'Error.OnInitialized()': no suitable method found to override
。
我试过让 Error.razor.cs
部分 class 继承自 Microsoft.AspNetCore.Components.ComponentBase
而不是我的 BaseComponent
也继承了这个 class 并且有一个覆盖OnInitialized
函数本身,它不会给出任何编译错误。
所以我的问题是:
为什么.razor
文件没有编译错误,而.razor.cs
文件有编译错误?
这是一个示例基本组件和用法,您可能希望将其用作模板。
注:
- 我将基本组件设为 class 而不是剃刀组件。任何 child 几乎肯定会覆盖内容。
- 我把基数class设为
abstract
所以不能直接用 - 我已经在所有内容中设置了命名空间。
// Components/MyComponentBase.cs
namespace WhosebugAnswers.Components
{
public abstract class MyComponentBase : ComponentBase
{
[Parameter] [EditorRequired] public string Header { get; set; } = String.Empty;
[Parameter] public RenderFragment? ChildContent { get; set; }
}
}
// Components/MyDiv.razor
@namespace WhosebugAnswers.Components
@inherits MyComponentBase
<h3>@this.Header</h3>
<div class="m-2">
@this.ChildContent
</div>
// Components/MyDiv.razor.cs
namespace WhosebugAnswers.Components
{
public partial class MyDiv : MyComponentBase
{
protected override void OnInitialized()
{
base.OnInitialized();
}
}
}
以及Index.razor
中的用法@page "/"
@page "/Index"
@using WhosebugAnswers
<PageTitle>Index</PageTitle>
<h1>Hello, world!</h1>
Welcome to your new app.
<SurveyPrompt Title="How is Blazor working for you?" />
<WhosebugAnswers.Components.MyDiv Header = "Hello Blazor">
My Div Content
</WhosebugAnswers.Components.MyDiv>