1. ホーム
  2. html

[解決済み] Razor - HTML.RAW でテキストが出力されない。

2022-02-10 13:19:02

質問

他の似たような質問に対して提案された解決策をすべて試しましたが、どれもうまくいかないようです。 要するに、私はモデルのコレクションからのデータで満たされたテーブルを表示しようとしているのです。それ自体は問題ないのですが、razorが常に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>");

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

何かお手伝いできることはありますか? よろしくお願いします。

解決方法は?

出力されないのは、razor構文が実行されているコンテキストが原因です。あなたの if ブロックでは、すべてのコードは通常の C# コンテキストにあるかのように実行され、行は

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

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

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