“@”字符后出现意外的“foreach”关键字

时间:2011-02-09 14:40:23

标签: asp.net-mvc-3 razor

我在剃刀中做了部分视图。当我运行它时,我得到以下错误 - 似乎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 个答案:

答案 0 :(得分:49)

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>

答案 1 :(得分: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 *@
      }
}

答案 2 :(得分:0)

我的情况与上述情况相反,但逻辑相同。

我在示例剃刀页面上使用了迭代器,并且如果我的页面直接以 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”之类的结构前面加上“ @”前缀。

如果我在if语句后使用html标记,则不会再收到此错误

@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>
}