0

我对 Web 前端相当陌生,但认为为我正在显示的矩阵中的每个“缺陷”设置切换按钮会很棒(因此您可以选择回溯矩阵的路径)。

幸运的是,我想出了如何在 Blazor 中动态制作按钮......不幸的是,我似乎无法弄清楚如何“连接”按钮。

如果我静态地制作一个按钮,我可以说 onclick="@(()=>alignment.ChangeArrow(1))" 用于第一个缺陷位置,将 1 替换为 2 用于第二个,等等...

在下面的代码片段中给它 1(而不是 i)使所有按钮都适用于第一个缺陷,但是如果我给它变量 i 那么它根本不起作用?

@for (int i = 0; i < alignment.FlawList.Count; i++)
{
    <button class="button" style="background-color:@alignment.ReturnColor(i)" onclick="@(()=>alignment.ChangeArrow(i))">@alignment.FlawList[i] @i</button>
}

有没有更好的 Blazor,网络方式来做我正在谈论的事情?

感谢您的任何指导。

4

2 回答 2

3

尝试这个:

@for (int i = 0; i < alignment.FlawList.Count; i++)
{
   var local_i = i;
    <button class="button" style="background-color:@alignment.ReturnColor(local_i)" onclick="@(()=>alignment.ChangeArrow(local_i))">@alignment.FlawList[local_i] @local_i</button>
}
于 2018-10-01T02:20:25.287 回答
0

这可能适用于调整....不知道性能等。无论如何,这似乎很有趣。让我想起了做 Winforms,但我真的不喜欢在 WinForms 后面做长代码。能够在 C# 中生成 RenderFragments 有一些好处。


在 cshtml 中放置一个 RenderFragment 标签。(无论您需要在页面上的何处呈现)

@MyFragment

创建更改箭头方法

void ChangeArrow(int i)
{
    Console.WriteLine("Changing arrow");
}

生成 RenderFragment 委托

static RenderFragment MyFragment = build =>
    {
        for (int i = 0; i < alignment.FlawList.Count; i++)
        {
            build.OpenElement(i + 101, "button"); //Open Element
            build.AddAttribute(i + 101, "style",
                $"background-color:{alignment.ReturnColor(i)}");
            build.AddAttribute(i + 101, "onclick", ChangeArrow(i)); // Assign Func to the onclick Attribute
            build.AddContent(i + 101, $"{alignment.FlawList[i]} {i}");
            build.CloseComponent(); //Making sure to close Element
        }
    };    
于 2018-10-18T02:13:56.163 回答