为什么我的剃须刀@如果评估不正确?

时间:2019-04-03 17:07:14

标签: asp.net-mvc razor razor-pages

为什么我的@if语句的评估结果不正确?鉴于以下剃刀代码:

@{
    List<string> list = new List<string> { "test 0", "test 1" };

    int index = 0;
}
@foreach (var item in list)
{
    <div index="@index" item="@if (index == 0) { <text>zero</text> }">
        @item
    </div>
    index++;
}

产生以下输出:

<div index="0" item="">
    test 0
</div>
<div index="1" item="">
    test 1
</div>

所需的输出:

<div index="0" item="zero">
    test 0
</div>
<div index="1" item="">
    test 1
</div>

文本zero从未得到渲染,在div标记上放置了一个断点,两次迭代都显示index 2(!)。我知道这可能是我很想念的东西,但我不知道那是什么。

更新:这没有区别

<div index="@index" item="@if (index == 0)
                              {
                                  <text>zero</text>
                              }">
    @item
</div>

2 个答案:

答案 0 :(得分:0)

尝试一下

@{
   List<string> list = new List<string> { "test 0", "test 1" };
   int index = 0;
}
@foreach (var item in list)
{
    if(index == 0){
    <div index="@index" item="zero">
        @item
        </div>
        index++;
    }
    else if(index == 1)
    {
        <div index="@index" item="">
        @item
        </div>
        index++;
    }
    else
    {
        // more here
    }
}

我认为也许您的括号放在错误的位置。这似乎对我有用……https://dotnetfiddle.net/BohydN(仅网格的右半部分是相关的)。

答案 1 :(得分:0)

这是“设计”,如此处所示:https://github.com/aspnet/AspNetCore/issues/9070