簡體   English   中英

Blazor 綁定到數組是一個元素嗎?

[英]Blazor binding to array is one element off?

編輯:我正在使用 Blazor .net

我正在嘗試將<select>的選定值綁定到 int[] 的元素。 由於某種原因,它綁定到 Role[k+1] 而不是 Role[k] 我已經將 k 的值放在 select 元素旁邊,以確保它是正確的,並實現了一個按鈕,當點擊時輸出 Role 中的每個項目[]。 由於它正在執行 Role[k+1] 我嘗試執行 Role[k-1] 並得到錯誤:“索引超出了數組的范圍”,正如預期的那樣。

我確定我做錯了什么,但我一生都無法弄清楚是什么。 另請注意,如果我綁定到 Role[0](第一次迭代時 Role[k] 應該等價於),則值設置為正確的數組元素。

這是代碼的相關部分:

 @{ 
        int k = 0;
        for (int i = 1; i < NumberOfPlayers + 1; i++)
        {
            int j = 0; Console.WriteLine(k);

        <p mb-3>
            Player @i - Role:
            <select @bind="Role[k]">
                @foreach (string roleText in RolesText)
                {

                    <option value="@j">@roleText - @j</option>

                    j++;
                }

            </select> @k
        </p>
            k++;
        }
    }

這是完整的代碼:

 <h1>Player 1 : @Role[0]</h1>
<h1>Player 2 : @Role[1]</h1>
<h1>Player 3 : @Role[2]</h1>
<h1>Player 4 : @Role[3]</h1>
<h1>Player 5 : @Role[4]</h1>
<h1>Player 6 : @Role[5]</h1>
<div class="card">
    <div class="card-header bg-dark text-white">
        <h5 class="font-weight-bold">Random Heroes</h5>
    </div>
    <div class="card-body">
        <select @bind="NumberOfPlayers" class="custom-select cm-lg-4">
            @for (int i = 1; i <= 6; i++)
            {
                @if (i == 1)
                {
                    <option value="@i" selected>@i Player</option>
                }
                else
                {
                    <option value="@i">@i Players</option>
                }

            }
        </select>
        <select @bind="NumberOfRounds" class="custom-select cm-lg-4 my-3">
            @for (int i = 1; i <= 6; i++)
            {
                @if (i == 1)
                {
                    <option value="@i" selected>@i Round</option>
                }
                else
                {
                    <option value="@i">@i Rounds</option>
                }
            }
        </select>

        @{ 
            int k = 0;
            for (int i = 1; i < NumberOfPlayers + 1; i++)
            {
                int j = 0; Console.WriteLine(k);

            <p mb-3>
                Player @i - Role:
                <select @bind="Role[k]">
                    @foreach (string roleText in RolesText)
                    {

                        <option value="@j">@roleText - @j</option>

                        j++;
                    }

                </select> @k
            </p>
                k++;
            }
        }

        <p m-4>
            @NumberOfPlayers players are playing @NumberOfRounds rounds
        </p>
        <button @onclick="GenerateHeroesClick">Generate Comp</button>

    </div>
</div>



@code {
    public int NumberOfPlayers { get; set; }
    public int NumberOfRounds { get; set; }
    public int[] Role = new int[6];
    public List<string> RolesText;

    protected override void OnInitialized()
    {
        NumberOfPlayers = 1;
        NumberOfRounds = 1;
        string[] CharacterRolesText = Enum.GetNames(typeof(CharacterRole));
        RolesText = new List<string>(CharacterRolesText);
        for(int l=0; l<Role.Length; l++)
        {
            Role[l] = 0;
        }
    }

    private void GenerateHeroesClick()
    {
        for(int i = 0; i<6; i++)
        {
            Console.WriteLine("Role Index" + i + " = " + Role[i]);
        }
    }

}

@bind="Role[k]"使用的是 k 的當前值,而不是創建元素時的 k 值。 我通過在播放器循環的每次迭代中聲明 int test = k 來解決它。 這是工作片段。

@{ 
            int k = 0;
            for (int i = 1; i < 7; i++)//NumberOfPlayers + 1; i++)
            {
                int j = 0; Console.WriteLine(k);
                int test = k;

            <p mb-3>
                Player @i - Role:
                
                <select @bind="Role[test]">
                    @foreach (string roleText in RolesText)
                    {

                        <option value="@j">@roleText - @j</option>

                        j++;
                    }

                </select> @k
            </p>
                k++;
            }
        }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM