【发布时间】:2023-03-28 07:05:01
【问题描述】:
我是编程、C# Blazor 和 RenderFragments 的新手,如果这是一个基本问题,请见谅。
我需要设置一个选项卡式对话框界面,其中根据单击的菜单按钮显示不同的选项卡。我设置了一个显示为按钮的 DevExpress 菜单项:
<DxMenuItem Text="States" IconCssClass="homeMenuButtonStates" CssClass="menuItemSm" Click="OnStatesBrowseClick" />
当用户点击时,调用 OnStatesBrowseClick 函数:
public void OnStatesBrowseClick()
{
tabName[tdiIndex] = "States";
TdiNewTab(tabName[tdiIndex]);
}
如您所见,它的工作是为字符串数组的成员赋值(tdiIndex 被赋值为“0”),并使用参数 tabName[tdiIndex] 调用 TdiNewTab 方法,其计算结果为“States”。
TdiNewTab 有一个 switch 语句,目前只有“状态”的情况。
public void TdiNewTab(string switchTabName) {
switch (switchTabName)
{
case "States":
renderStatesBrowsePage(tdiIndex);
break;
}
tdiIndex++;
}
如果出现“States”,它会指向应创建选项卡的 renderStatesBrowsePage。
private RenderFragment renderStatesBrowsePage(int index)
{
deleteMe++;
RenderFragment item = tabsChildContent =>
{
deleteMe++;
tabsChildContent.OpenComponent<DxTabPage>(0);
tabsChildContent.AddAttribute(2, "Text", $"Tab # {index}");
tabsChildContent.AddAttribute(3, "ChildContent", (RenderFragment)((tabPageChildContent) =>
{
tabPageChildContent.OpenComponent<States>(0);
tabPageChildContent.CloseComponent();
}));
tabsChildContent.CloseComponent();
};
return item;
}
但是,什么也没有发生。使用断点,我确定“RenderFragment item = tabsChildContent =>”中的块没有被执行。事实上,当我把两个“deleteMe++”都放在那里时,只有第一个增加了变量。
我不知道为什么该块不会执行。任何建议将不胜感激!
回应Magoo先生的回答:
我现在正尝试从我的标记中调用 RenderFragment:
<DxMenuItem Text="States" IconCssClass="homeMenuButtonStates" CssClass="menuItemSm" Click="StatesBrowseClick">
@if (statesBrowse == 1)
{
@renderStatesBrowsePage(0);
}
</DxMenuItem>
@code
public void StatesBrowseClick()
{
int statesBrowse = 1;
}
但是,仍然没有任何反应。我确保在方法之外初始化为“0”的 statesBrowse 在单击后等于 1。我还尝试删除 @if 语句(只留下“@renderStatesBrowsePage(0);”,我得到了相同的结果。
注意:我使用的是 VS 2019,在 StatesBrowseClick 中,它告诉我“变量 'statesBrowse' 已分配,但它的值从未使用过。”不过,这似乎无关紧要,因为我尝试手动将其设置为“1”并删除“if”语句。
【问题讨论】: