Razor替代Html.Raw()

时间:2011-09-14 03:28:11

标签: asp.net-mvc-3 c#-4.0 razor

我在一个方法中打印出html。这是代码:

@Html.Raw(Html.GenerateTabs())  //works -- but is inconvinent

真的不想做这样的每一个方法。这是我想要的方式。但它不起作用。当我在浏览器中运行代码html打印时。

@Html.GenerateTabs()   //prints html in the broswer


<text>@Html.GenerateTabs()</text>  //prints html in the broswer

是否有一种剃刀友好的方式来做到这一点?

4 个答案:

答案 0 :(得分:11)

如果您的代码输出MvcHtmlString而不是字符串,它将正确输出其中包含的HTML。

使用带有HTML的字符串,使用静态工厂方法构造MvcHtmlString。

public MvcHtmlString OutputHtml() {
    return MvcHtmlString.Create("<div>My div</div>");
}

然后在视图中:

@OutputHtml()

答案 1 :(得分:2)

Razor默认编码。到目前为止,我还没有在视图级别或应用程序级别找到关闭它。

也许可以进行扩展?

    public static MvcHtmlString RawHtml(this string original)
    {
        return MvcHtmlString.Create(original);
    }

...

@Html.GenerateTabs().RawHtml();

答案 2 :(得分:1)

只需让你的GenerateTabs返回一个MvcHtmlString。

它与此处的其他帖子类似,但为什么要通过另一种方法输出原始html而不是仅指定Html.Raw。 IE我不是在提倡另一种方法,如下所示,只是确保你的GenerateTabs返回MvcHtmlString。

答案 3 :(得分:1)

您可能想在App_Code文件夹中创建一个帮助程序。 这里的代码已编译完毕,可用于所有剃刀视图。

添加一个文件,例如SiteHelper.cshtml,并在其中添加辅助方法

@helper GenerateTabs()
{
   <div>blah</div>
}

然后在任何剃须刀视图中使用它

@SiteHelper.GenerateTabs()