web-dev-qa-db-ja.com

Razor-HTML.RAWはテキストを出力しません

他の同様の質問に対して提案されたすべてのソリューションを試しましたが、どれもうまくいかないようです。本質的に、モデルのコレクションからのデータで満たされたテーブルを表示しようとしています。それ自体は問題ではありませんが、カミソリが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>");

実際に呼び出されますが、生成されたページには出力がありません。

何か助け?事前に感謝します。

35
Palkos

出力されない理由は、実行されるカミソリ構文のコンテキストのためです。 ifブロックでは、すべてのコードは通常のC#コンテキストと次の行にあるかのように実行されます。

Html.Raw("</tr><tr>");

MvcHtmlStringを返しますが、あなたはそれで何もしていません。出力コンテキストを入力する必要があります。

@Html.Raw("</tr><tr>");
70
Simon Belanger

私は回避策を使用します。

試してください:

<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>

それが役に立てば幸い。

3
ysrb

Html.Rawを@(および)で囲むと、問題が解決しました。外側の@ {と}があったとしても、各Html.Rawステートメントの周りに@(と)が必要でした。

0
Isaac Levy

/ nを使用してc#で行うように、実際に改行に使用されるHtml.Raw

例えば:

<text>
@html.raw("</tr><tr>")
</text>

役に立てば幸いです。

0
saurav singh

Html.Raw

HTMLマークアップとして解釈されるように、HTMLマークアップをHtmlStringインスタンスにラップします。例えば ​​:

コントローラ

public actionresult Htmlraw()
{
    viewbag.message = "Hey friends lets go" + "<br />" + "for chillout";
    return view();
}

出力

@html.raw(viewbag.message);
0
Rizwan Younas