有以下情况。在我的剃须刀页面中,我有 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 组件类中的每一个中实现。但是我无法在 <> 元素中添加模态组件类。
这可能以某种方式吗?