1

有以下情况。在我的剃须刀页面中,我有 40 个按钮,每个按钮都会打开 40 个 Blazored-modals 之一:

<div class="row">
    ...
    <button type="button" @onclick="@(() => ShowComBoxModal())">
      ComBox Parameters
    </button>
</div>

<div class="row">
  ...
    <button type="button" @onclick="@(() => ShowGTLSModal())">
        GTLS Parameters
    </button>
</div>

对于 40 个模态中的每一个,我编写了一个例程来打开模态,例如:

void ShowComBoxModal()
    {
        var parameters = new ModalParameters();
        parameters.Add("PkId", CurrentD5User.PkId);
        parameters.Add("SystemID", 7);
        parameters.Add("cfg", cfgComBox);

        ModalService.Show<ModalComBox>("ComBox", parameters);    
    }

void ShowGTLSModal()
    {
        var parameters = new ModalParameters();
        parameters.Add("PkId", CurrentD5User.PkId);
        parameters.Add("SystemID", 8);
        parameters.Add("cfg", cfgGtls);

        ModalService.Show<ModalGTLS>("GTLS", parameters);    
    }

我想通过编写一种通用方法来消除几乎相同代码 40 次的冗余。问题是,我可以将 PkId 和 SystemID 传递给该方法,因为它们是字符串,但是我真的很难 a) 在 .Show 方法的 <> 部分中调用模态对象和 b) 移交因为每个 cfgObject 都是 40 种不同类型之一,我必须将其转换回其原始类型。我想要这样的东西:

<button type="button" @onclick="@(() => ShowGTLSModal<ModalGTLS>(@CurrentD5User.PkId, 8, "cfgGtls"))">
            GTLS Parameters
        </button>

void ShowModal<T>(string PkId, string SystemID, object cfgObject) 
{
var parameters = new ModalParameters();
parameters.Add("PkId", PkId);
parameters.Add("SystemID", SystemID);
parameters.Add("cfg", cfgObject);

ModalService.Show<T>("GTLS", parameters);    
}

我的 cfgObjects 有不同的类型:

GoodwillPkw cfgGodwill = new GoodwillPkw();
ComBox cfgComBox = new ComBox();
Gtls cfgGtls = new Gtls();
ConnectMe cfgConnectMe = new ConnectMe();
...

因此,我必须将该对象转换回其原始类型,并让 Show-method 使用我在该方法中收到的类型。后者我将能够在 40 个 Modal 组件类中的每一个中实现。但是我无法在 <> 元素中添加模态组件类。

这可能以某种方式吗?

4

0 回答 0