Неожиданное ключевое слово "foreach" после символа "@" - PullRequest
27 голосов
/ 09 февраля 2011

У меня есть частичное представление в бритве.Когда я запускаю его, я получаю следующую ошибку - кажется, что 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>

Ответы [ 3 ]

49 голосов
/ 09 февраля 2011

Внутри вашего using блока Razor ожидает источник C #, а не 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 голосов
/ 06 сентября 2012

Я просто хочу добавить к 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 *@
      }
}
0 голосов
/ 17 июня 2019

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

Я использую итератор на странице примера бритвы, и я получаю вышеуказанную ошибку, если моя страница начинается непосредственно с 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>
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...