我對網絡前端相當陌生,但我認為在我正在顯示的矩陣中為每個'缺陷'切換按鈕會很棒(所以你可以選擇一個回溯矩陣的路徑)。
幸運的是,我想出瞭如何在Blazor中動態製作按鈕......不幸的是,我似乎無法弄清楚如何“連接”按鈕。
如果我靜態地製作一個按鈕,我可以說onclick =“@(()=> alignment.ChangeArrow(1))”為第一個缺陷位置,用2替換1代表第二個等等...
在下面的代碼片段中給它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,網絡方式來做我正在談論的事情?
感謝您的指導。
嘗試這個:
@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>
}
這可能適用於調整....對性能等沒有任何想法。無論如何看起來都很有趣。讓我想起做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
}
};