I have a partial view done in razor. When I run it I get the following error - it seems like Razor gets stuck into thinking I'm writing code everywhere.
Unexpected "foreach" keyword after "@" character. Once inside code, you do not need to prefix constructs like "foreach" with "@"
Here is my view:
@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>
Inside your using
block, Razor is expecting C# source, not HTML.
Therefore, you should write foreach
without an @
.
Inside an HTML tag, Razor expects markup, so you would use @
.
For example:
<div>
<!-- Markup goes here -->
@if (x) {
//Code goes here
if (y) {
//More code goes here
<div>
<!-- Markup goes here -->
@if (z) { }
</div>
}
}
</div>
You only need an @
if you want to put code where it's expecting markup, or if you want to write output anywhere.
To put non-tag-like markup where it's expecting code, use @:
or <text>
.