Почему моя бритва @if оценивается неправильно? - PullRequest
0 голосов
/ 03 апреля 2019

Почему мое утверждение @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 голосов
/ 17 апреля 2019

Это «побочный дизайн», как показано здесь: https://github.com/aspnet/AspNetCore/issues/9070

0 голосов
/ 04 апреля 2019

Попробуйте это

@{
   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 (релевантна только правая половина сетки).

...