热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Blazor服务器“代码隐藏”模式:OnInitializedAsync():找不到合适的方法来覆盖TLDR详细解释

我有一个Blazor(服务器)应用程序,该应用程序运行良好,并且遵守Microsoft.CodeAnalysis.FxCopAn

我有一个Blazor(服务器)应用程序,该应用程序运行良好,并且遵守microsoft.CodeAnalysis.FxCopAnalyzersStyleCop.Analyzers设置的所有规则。

一个严重削减的剃须刀页面如下:

@inherits OwningComponentBase
@inject IModalService ModalService
@inject IJSRuntime JSRuntime
// UI code
@code
{
private readonly CancellationTokenSource TokenSource = new CancellationTokenSource();
ElementReference myElementReferenceName;
protected override async Task OnAfterRenderAsync(bool firstRender)
{
await this.myElementReferenceName.FocusAsync(this.JSRuntime);
}
protected override async Task OnInitializedAsync()
{
....
}
public void Dispose()
{
this.TokenSource.Cancel();
}
protected void ShowModalEdit(object someObject)
{
.....
Modal.Show("Edit",parameters);
}
}

注意#1:我基于Daniel Roth's suggestion使用了@inherits OwningComponentBase

注意#2:我正在使用Chris Sainty's Modal component组件

但是,当我尝试将所有代码从@code {...}部分移到“背后的代码”子类(“ MyPage.razor.cs”)时,我遇到了以下错误。


  

“ MyPage”不包含“服务”的定义且不可访问
  扩展方法“服务”接受.....

  
  

'MyPage.OnAfterRenderAsync(bool)':找不到合适的方法来覆盖

  
  

'MyPage.OnInitializedAsync()':找不到合适的方法来覆盖

  
  

类型'MyPage'不能用作泛型中的类型参数'T'
  类型或方法'IModalService.Show(string,ModalParameters,
  ModalOptions)”。没有来自的隐式引用转换
  “ MyPage”到“ microsoft.AspNetCore.Components.ComponentBase”。

建议?


当我使用部分类方法并且尝试设置Identity时,遇到此错误。我改用基类解决了。

我正在使用的

部分课程
在添加一个组件(例如MyComponent)之后,添加一个类MyComponent.razor.cs
用于注射服务
使用

[注入]
公共建筑服务服务{组; }

用于基类方法

在添加一个组件后添加一个例如MyComponent之后,添加一个类MyComponent.razor.cs
更改类名并使其继承于componentBase
MyComponentBase:ComponentBase

并将其放在MyComponent.razor的顶部

@inherits MyComponentBase

使用受保护的关键字使您的方法可访问

,

您的MyPage.razor.cs应该继承自ComponentBase类,而您的Mypage.razor应该继承自MyPage.razor.cs

在“代码隐藏”类中,应为要注入的每个服务使用[Inject]属性,并使其至少具有protected属性,以便能够在剃须刀组件中使用它们。

下面是我的一个测试应用程序中的一个示例,请注意,它使用.net-core 3.0,在3.1中可以使用部分类。

Index.razor

@page "/"
@inherits IndexViewModel



@if (users == null)
{

Hang on while we are getting data...


}
else
{











@foreach (var user in users)
{







}

Id Username Email FirstName LastName
@user.Id @user.Username @user.Email @user.FirstName @user.LastName

}


IndexViewModel.cs

public class IndexViewModel : ComponentBase,IDisposable
{
#region Private Members
private readonly CancellationTokenSource cts = new CancellationTokenSource();
private bool disposedValue = false; // To detect redundant calls
[Inject]
private IToastService ToastService { get; set; }
#endregion
#region Protected Members
protected List users;
[Inject] IUsersService UsersService { get; set; }
protected string ErrorMessage { get; set; }
#endregion
#region Constructor
public IndexViewModel()
{
users = new List();
}
#endregion
#region Public Methods
#endregion
#region Private Methods
protected override async Task OnInitializedAsync()
{
await GetUsers().ConfigureAwait(false);
}
private async Task GetUsers()
{
try
{
await foreach (var user in UsersService.GetAllUsers(cts.Token))
{
users.Add(user);
StateHasChanged();
}
}
catch (OperationCanceledException)
{
ShowErrorMessage($"{ nameof(GetUsers) } was canceled at user's request.","Canceled");
}
catch (Exception ex)
{
// TODO: Log the exception and filter the exception messages which are displayed to users.
ShowErrorMessage(ex.Message);
}
}
private void ShowErrorMessage(string message,string heading ="")
{
//ErrorMessage = message;
//StateHasChanged();
ToastService.ShowError(message,heading);
}
private void ShowSuccessMessage(string message,string heading = "")
{
ToastService.ShowSuccess(message,heading);
}
protected void Cancel()
{
cts.Cancel();
}
#endregion
#region IDisposable Support
protected virtual void Dispose(bool disposing)
{
if (!disposedValue)
{
if (disposing)
{
cts.Dispose();
}
disposedValue = true;
}
}
public void Dispose()
{
Dispose(true);
// TODO: uncomment the following line if the finalizer is overridden above.
// GC.SuppressFinalize(this);
}
#endregion
}

希望这会有所帮助。

,

TLDR

确保您的 razor.cs 文件中的命名空间正确

详细解释

就我而言,当我将类放在错误的命名空间中时出现此错误。 page.razor.cs 文件与 page.razor 文件位于同一目录中,并且它包含一个部分类 as accepted by the October 2019 update。

然而,即使文件位于 path/to/dir 中,page.razor.cs 的命名空间为 path.to.another.dir,这会导致抛出此错误。只需将命名空间更改为 path.to.dir 即可为我修复此错误!


推荐阅读
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 本文介绍了一个React Native新手在尝试将数据发布到服务器时遇到的问题,以及他的React Native代码和服务器端代码。他使用fetch方法将数据发送到服务器,但无法在服务器端读取/获取发布的数据。 ... [详细]
  • 本文介绍了解决java开源项目apache commons email简单使用报错的方法,包括使用正确的JAR包和正确的代码配置,以及相关参数的设置。详细介绍了如何使用apache commons email发送邮件。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • 后台获取视图对应的字符串
    1.帮助类后台获取视图对应的字符串publicclassViewHelper{将View输出为字符串(注:不会执行对应的ac ... [详细]
  • gitlab重置password
    ruby没怎么学,自己搭建的gitlab的rootpassword又忘了。幸好看见此帖子,试验okhttp:roland.kierkels.netgitreset-your-git ... [详细]
  • C语言自带的快排和二分查找
    Author🚹:CofCaiEmail✉️:cai.dongjunnexuslink.cnQQ😙:1664866311personalPage&#x ... [详细]
  • Annotation的大材小用
    为什么80%的码农都做不了架构师?最近在开发一些通用的excel数据导入的功能,由于涉及到导入的模块很多,所以开发了一个比较通用的e ... [详细]
author-avatar
平凡书生518
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有