【问题标题】:Inherit from ViewComponent without invoke the parent ViewComponent从 ViewComponent 继承而不调用父 ViewComponent
【发布时间】:2021-06-21 04:16:47
【问题描述】:

我正在使用 ASP .Net Core ViewComponent,并且我有一个组件之间共享的公共功能,所以我决定制作一个公共 ViewComponent,所有其他组件都必须继承自它

我先试过了

    public class CommonViewComponent: ViewComponent
    {
       //some methods
    }

还有这样的子组件

 public class SubDealsViewComponent: CommonViewComponent
 {
      public async Task<IViewComponentResult> InvokeAsync()
      {
          //calling some methods from the parent
      }
 }

在这种情况下,我遇到了父组件必须包含Invoke()InvokeAsync() 的错误

当我为父组件创建 Invoke() 方法时,我得到了这个错误

InvalidOperationException:查看组件 'Components.SubDealsViewComponent' 必须只有一个公共方法 命名为“InvokeAsync”或“Invoke”。

【问题讨论】:

    标签: c# asp.net-core .net-5 asp.net-core-viewcomponent


    【解决方案1】:

    为了重用成员,您的父视图组件类可以声明为abstract,这样就不需要定义InvokeInvokeAsync 方法,如下所示:

    public abstract class CommonViewComponent: ViewComponent
    {
       //some methods
    }
    

    这是有道理的,否则它可能是一个有效的可用视图组件,但这不是你的目的(直接使用它)。

    【讨论】:

    • 它可以工作是的我不会直接使用它,我会用它来放置一些使用HttpContext和Sessions的方法,而不是在所有组件中注入IHttpContextAccessor
    猜你喜欢
    • 2018-02-02
    • 1970-01-01
    • 2015-04-18
    • 2022-01-14
    • 2021-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多