Razor - HTML.RAW不输出文本

时间:2013-07-21 12:54:23

标签: html asp.net-mvc 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>

所以本质上每个第三个元素我都希望Razor输出“”字符串来向表中添加另一行。除了页面源中没有这种刺痛之外,所有似乎都工作正常。在调试中我可以看到这一行

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

实际上已调用,但生成的页面中没有输出。

有任何帮助吗? 非常感谢...

6 个答案:

答案 0 :(得分:69)

它没有输出的原因是因为正在执行剃刀语法的上下文。在if块中,所有代码都像在常规C#上下文和行中一样运行:

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

返回MvcHtmlString但你没有做任何事情。您需要输入输出上下文:

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

答案 1 :(得分:3)

我会使用一种解决方法。

尝试:

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

希望它有所帮助。

答案 2 :(得分:0)

Html.Raw实际上用于换行,就像你在c#中使用/ n

所做的那样

例如:

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

我希望它有所帮助。

答案 3 :(得分:0)

Html.Raw

在HtmlString实例中包装HTML标记,以便将其解释为HTML标记。 例如:

控制器

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

输出

@html.raw(viewbag.message);

答案 4 :(得分:0)

用@(和)封装Html.Raw为我解决了这个问题。虽然有@ {和}外部,但它仍然需要@(和)围绕每个Html.Raw语句。

答案 5 :(得分:0)

确保“<”和标签的第一个字符之间没有空格

我有“