かみそりで部分的なビューを作成しました。実行すると、次のエラーが発生します。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>
using
ブロック内では、RazorはHTMLではなくC#ソースを期待しています。
したがって、@
なしで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>
を使用します。
マークアップが実際にコードアップ内のコードセクションを妨害することはなく、終了タグに到達するとすぐにマークアップセクションに戻るという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 *@
}
}
私の状況は上記の逆ですが、論理は同じです。
かみそりのサンプルページでイテレータを使用していますが、ページが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>
}