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