【问题标题】:Base 2 different Blazor pages on the same code behind基于相同代码的 2 个不同的 Blazor 页面
【发布时间】:2021-06-09 07:26:22
【问题描述】:

我有一个 Blazor 页面,需要在不同情况下以不同方式呈现。我目前正在使用一个非常大的“if”语句来在两者之间做出决定,但这非常笨拙。我不想复制/粘贴代码背后的重要逻辑。有没有办法让 2 个不同的 UI 页面基于相同的代码?

我尝试过有 2 个不同的页面,后面有代码,然后继承一个包含所有逻辑的基类,就像这样。

public partial class MyPageHorizontal : MyPageLogic
{
}

public partial class MyPageVertical : MyPageLogic
{
}

public partial class MyPageLogic : ComponentBase
{
    //logic and properties go here
}

我收到错误“基类与其他部分中声明的不同”

【问题讨论】:

  • 你为什么不创建一个基类(直接用于 .razor 后端)有 2 个不同的孩子(分离)?
  • 如果您有与这些“页面”关联的 Razor 文件,请检查背后生成的代码以查看它们继承自什么 - 这听起来像是基类之间的不匹配 - 但我从未在 Blazor 中看到该消息之前,所以我怀疑你已经简化了问题?绝对支持继承基础组件。
  • @AliBorjian 这就是我在代码 sn-p 中显示的内容。它给出了我提到的构建错误
  • @MisterMagoo Blazor 页面已经从 ComponentBase 下降了。这就是为什么后面的代码是部分类而不是常规类的原因。如果您从 ComponentBase 生成类后的代码,您可以看到这一点,并且您会看到警告“基本类型 'ComponentBase' 已在其他部分中指定”。如果我试图让后面的代码继承自我自己的基础,它看起来像是编译器的多重继承。
  • 好的,这是一个例子——你的实现有什么不同? blazorrepl.com/repl/GFkAkjas06Oj2zPF17

标签: blazor blazor-webassembly


【解决方案1】:

你的 Razor 文件需要从你的自定义 Base 继承,像这样

@inherits IndexBase
@page "/"
@page "/IndexHoriz"

<h1>Hello, world!</h1>

Welcome to your new app.  This page should render horizontally

<SurveyPrompt Title="How is Blazor working for you?" />

Razor 编译器将假定它们从 ComponentBase 继承。

【讨论】:

  • 我用工作代码更新了 repo:ithub.com/bradirby/BlazorPageInheritance
猜你喜欢
  • 1970-01-01
  • 2015-03-02
  • 2021-08-09
  • 2021-12-20
  • 1970-01-01
  • 2022-08-05
  • 2020-09-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多