他の同様の質問に対して提案されたすべてのソリューションを試しましたが、どれもうまくいかないようです。本質的に、モデルのコレクションからのデータで満たされたテーブルを表示しようとしています。それ自体は問題ではありませんが、カミソリが3列で常に生成されるようにします(要素の数に関係なく)。私の当初のアイデアは、そのようにすることでした:
<table class="projects-grid">
<tr>
@for(int i = 0; i< Model.Count(); i++)
{
if (i != 0 && i % 3 == 0)
{
Html.Raw("</tr><tr>");
}
var item = Model.ElementAt(i);
<td class="project-tile">
@Html.DisplayFor(modelItem => item.Title)
</td>
}
</tr>
</table>
したがって、基本的に3要素ごとに、Razorが ""文字列を出力して、テーブルに別の行を追加するようにします。この文字列がページソースに存在しないこと以外は、すべて正常に動作しているようです。デバッグでは、この行を見ることができます
Html.Raw("</tr><tr>");
実際に呼び出されますが、生成されたページには出力がありません。
何か助け?事前に感謝します。
出力されない理由は、実行されるカミソリ構文のコンテキストのためです。 if
ブロックでは、すべてのコードは通常のC#コンテキストと次の行にあるかのように実行されます。
Html.Raw("</tr><tr>");
MvcHtmlString
を返しますが、あなたはそれで何もしていません。出力コンテキストを入力する必要があります。
@Html.Raw("</tr><tr>");
私は回避策を使用します。
試してください:
<table class="projects-grid">
<tr>
@for(int i = 0; i< Model.Count(); i++)
{
if (i != 0 && i % 3 == 0)
{
<text>
@Html.Raw("</tr><tr>")
</text>
}
var item = Model.ElementAt(i);
<td class="project-tile">
@Html.DisplayFor(modelItem => item.Title)
</td>
}
</tr>
</table>
それが役に立てば幸い。
Html.Rawを@(および)で囲むと、問題が解決しました。外側の@ {と}があったとしても、各Html.Rawステートメントの周りに@(と)が必要でした。
/ nを使用してc#で行うように、実際に改行に使用されるHtml.Raw
例えば:
<text>
@html.raw("</tr><tr>")
</text>
役に立てば幸いです。
Html.Raw
HTMLマークアップとして解釈されるように、HTMLマークアップをHtmlStringインスタンスにラップします。例えば :
コントローラ
public actionresult Htmlraw()
{
viewbag.message = "Hey friends lets go" + "<br />" + "for chillout";
return view();
}
出力
@html.raw(viewbag.message);