Unexpected "foreach" keyword after "@" character
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>
.
I just want to add to SLaks answer that markup does not actually disturb the code section only within the markup, and as soon as the closing tag is reached it is reverting back to the markup section.
And similar is once within the markup, you need to use the @ symbol even after code.
Say for example you have the following:
@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 *@
}
}