Unexpected "foreach" keyword after "@" character
asp.net-mvc-3, razor
Solution
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>`.
Problem
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> ```