Подтвердить что ты не робот

Неожиданное ключевое слово "foreach" после символа "@"

У меня есть частичный вид, сделанный в бритве. Когда я запускаю его, я получаю следующую ошибку: кажется, что Razor застрял в мысли, что я пишу код повсюду.

Неожиданное ключевое слово "foreach" после символа "@". После внутреннего кода вам не нужно префиксные конструкции, такие как "foreach" с "@"

Вот мой взгляд:

@model IEnumerable<SomeModel>

<div>
@using(Html.BeginForm("Update", "UserManagement", FormMethod.Post)) {

    @Html.Hidden("UserId", ViewBag.UserId)

@foreach(var link in Model) {
    if(link.Linked) {
         <input type="checkbox" name="userLinks" value="@link.Id" checked="checked" />@link.Description<br />
    } else {
         <input type="checkbox" name="userLinks" value="@link.Id" />@link.Description<br />         
    }
}

}
</div>
4b9b3361

Ответ 1

Внутри блока using Razor ожидает источник С#, а не HTML.

Следовательно, вы должны написать foreach без @.

Внутри тега HTML Razor ожидает разметки, поэтому вы используете @.

Например:

<div>
    <!-- Markup goes here -->
    @if (x) {
        //Code goes here
        if (y) {
            //More code goes here
            <div>
                <!-- Markup goes here -->
                @if (z) { }
            </div>
        }
    }
</div>

Вам нужен только @, если вы хотите поместить код, где он ожидает разметки, или если вы хотите записать вывод где угодно.

Чтобы разместить разметку без тегов, где она ожидает код, используйте @: или <text>.

Ответ 2

Я просто хочу добавить к SLaks ответ, что разметка на самом деле не нарушает раздел кода только в разметке, и как только закрывающий тег достигнут, он возвращается обратно в раздел разметки.

И аналогично в разметке, вам нужно использовать символ @даже после кода.

Скажем, например, у вас есть следующее:

@if(true) {
      <span>
            Markup section here, you need to include the @symbol
            @if(1 = 1)
            {
            }
            @if(2 = 2) @* The @ symbol here is required *@
            {
            }                
      </span>
      @: Code section back here, to output you need the "@:" symbol to display markup, although it is after the markup 
      if(false) @* Here the @ symbol isn't required *@
      {   
            some_statment; @* This will not be sent to the browser *@
            @display_someStament @* If we want to send it to the browser, 
                   then we need the @ symbol even in the code section *@
      }
}

Ответ 3

Моя ситуация противоположна вышесказанному, но логика та же.

Я использую итератор на странице примера бритвы, и я получаю вышеуказанную ошибку, если моя страница начинается напрямую с синтаксиса if и foreach, как показано ниже

@if (Model != null)
{
        @foreach (var place in @Model.ToList())
        {
            <div class="swiper-slide">
                <figure class="popular-visits-card">
                    <img src="@place.ImgUrl" alt="">
                    <figcaption class="content">
                        <p class="title">
                            @place.Name
                        </p>
                        <p class="subtitle">
                            @place.Description
                        </p>
                    </figcaption>
                </figure>
            </div>

        }
}

Неожиданное ключевое слово "foreach" после символа "@". Оказавшись внутри кода, вам не нужно ставить перед конструкциями, такими как "foreach", перед "@".

если я использую html-тег после оператора if, я больше не получаю эту ошибку

@model List<Pupularity>
@{
    Layout = null;
}

@if (Model != null)
{
    <div>
        @foreach (var place in @Model.ToList())
        {
            <div class="swiper-slide">
                <figure class="popular-visits-card">
                    <img src="@place.ImgUrl" alt="">
                    <figcaption class="content">
                        <p class="title">
                            @place.Name
                        </p>
                        <p class="subtitle">
                            @place.Description
                        </p>
                    </figcaption>
                </figure>
            </div>

        }
</div>
}