如何接受html内容作为MVC + Razor中辅助函数的参数?

Bre*_*ill 4 c# asp.net-mvc html-helper razor

我注意到一些Razor函数将html内容作为参数,例如:

@section Scripts  {
    <script type="text/javascript">
        $(function() {
            alert("aha");
        });
    </script>
}
Run Code Online (Sandbox Code Playgroud)

这不会立即渲染html内容,而是Razor的Section()系统存储它以供以后渲染.

我想编写自己的帮助函数,以相同的方式接受html内容,例如:

@Html.MyCoolFunction {
    <div><stuff><blah>...
    dafsdfsa
    </blah></stuff></div>
}
Run Code Online (Sandbox Code Playgroud)

我不知道什么语法会起作用,但可能MyCoolFunction会接受一个MvcHtmlString作为参数,我可以用它做我想做的事情.

这可能吗?

Bre*_*ill 5

我设法从intellisense和其他代码示例中解决了这个问题.

像这样的扩展函数:

    public static MvcHtmlString DoTwice(this HtmlHelper htmlHelper, Func<MvcHtmlString, HelperResult> htmlContent)
    {
        var x = htmlContent(new MvcHtmlString("")).ToHtmlString() +
                htmlContent(new MvcHtmlString("")).ToHtmlString();
        return new MvcHtmlString(x);
    }
Run Code Online (Sandbox Code Playgroud)

可以调用并传递阻止html内容,如下所示:

@Html.DoTwice(
    @<div>What happens??</div>
)
Run Code Online (Sandbox Code Playgroud)

输出:

What happens??
What happens??
Run Code Online (Sandbox Code Playgroud)