.net 我在Blazor中有一个与循环作用域相关的代码,但我无法理解

atmip9wb  于 2022-12-14  发布在  .NET
关注(0)|答案(2)|浏览(103)

我在Blazor中编写了以下代码,我是按照本教程编写的。net learn,但我不明白单击此span时currentStar的值是如何更改的
<span class="btn btn-danger"@onclick="(e => SubmitRating(currentStar))"></span>,但是当我使用相同的代码时,使用i代替currentStar,将值发送到SubmitRating()函数始终为6,它不会根据我单击的范围而更改,例如,当我单击循环显示的第一个范围时,使用@onclickevent中的变量currentStar,将值提交给SubmitRating()为1,但当使用变量i时,提交给SubmitRating()的值始终为6。这是下面的代码,请观看链接的视频,以清楚地理解我想说的内容。
'

@for (int i = 1; i < 6; i++)
                    {
                        int currentStar=i;
                        
                        if (i <= currentRating)
                        {
                            <span class="btn btn-dark"  @onclick="(e => SubmitRating(currentStar))"></span>
                        }
                        else
                        {
                            <span class="btn btn-danger" @onclick="(e => SubmitRating(i))"></span>
                        }
                    }

@code {
    Paiza selectedProduct;
    string selectedProductid;
    void selectProducts(string id)
    {
        selectedProductid = id;
        selectedProduct = Productservis.GetProducts().First(x => x.Id == id);
        GetCurrentRating();
    }

    int currentRating = 0;
    int voteCount = 0;
    string voteLabel;

    void GetCurrentRating()
    {
        if (selectedProduct.Ratings == null)
        {
            currentRating = 0;
            voteCount = 0;
        }
        else
        {
            voteCount = selectedProduct.Ratings.Count();
            voteLabel = voteCount > 1 ? "Votes" : "Vote";
            currentRating = selectedProduct.Ratings.Sum() / voteCount;
        }

    
    }

    void SubmitRating(int rating)
    {
      
        Productservis.AddRating(selectedProductid, rating);
        selectProducts(selectedProductid);
    }
}

'
我尝试记录这两个变量,但在HTML中呈现的值是相同的。

if (i <= currentRating)
                        {
                            <span class="btn btn-dark" id="@i" name="@currentStar" @onclick="(e => SubmitRating(currentStar))"></span>
                        }
                        else
                        {
                            <span class="btn btn-danger" id="@i" name="@currentStar" @onclick="(e => SubmitRating(i))"></span>
                        }
up9lanfz

up9lanfz1#

请尝试以下操作:

<span id="@i" class="btn btn-danger" @onclick='(() => SubmitRating(i))'></span>
mctunoxg

mctunoxg2#

变量 i 在Razor组件代码被评估为呈现时递增,并且始终为 6。这就是为什么您有行:

int currentStar=i;

存储 i 的中间值
请看我的答案

相关问题