在Razor中将动态HTML内容呈现为变量

时间:2014-05-14 11:40:14

标签: asp.net-mvc razor

我想将动态HTML内容呈现到变量中,以便稍后将其传递给函数。原因是,我通过另一个平台收到实际内容,我可以使用内部函数将其打印出来。此函数接受要放入占位符的值。

示例:

This is my content:
{mytable}
Blah

现在我可以在mytable上设置任何内容。好。 我想放在那里的内容目前如下。

@using System.Data
@model Dictionary<string, DataView>
<table>
    @foreach (var group in Model)
    {
        <tr>
            <th colspan="3">@group.Key</th>
        </tr>

        foreach (DataRowView data in group.Value)
        {
            <tr>
                <td>@data.Row["col1"]</td>
                <td>@data.Row["col2"]</td>
                <td>@data.Row["col3"]</td>
            </tr>
        }
    }
</table>

好。将上述输出实际呈现为变量的最佳方法是什么?我首先想到的只是将每个HTML行追加到一个字符串中,但这对我来说听起来效率很低而且很弱。

我不是ASP.NET的专家,我来自PHP,我对输出缓冲区有所了解。这是一种可能的方式吗?你会推荐什么?

2 个答案:

答案 0 :(得分:1)

创建强类型的局部视图并在实际视图中添加此局部视图

见以下链接

http://www.codeproject.com/Tips/617361/Partial-View-in-ASP-NET-MVC

答案 1 :(得分:1)

您可以创建 ViewHelper

@helper RenderTable(Dictionary<string, System.Data.DataView> model)
{
    <table>
        @foreach (var group in Model)
        {
            <tr>
                <th colspan="3">@group.Key</th>
            </tr>

            foreach (System.Data.DataRowView data in group.Value)
            {
                <tr>
                    <td>@data.Row["col1"]</td>
                    <td>@data.Row["col2"]</td>
                    <td>@data.Row["col3"]</td>
                </tr>
            }
        }
    </table>
}

然后叫它:

@{
    string output = RenderTable(someData).ToHtmlString();
}