如何从函数返回HtmlTable以显示在.cshtml文件中

时间:2015-09-16 14:36:48

标签: c# asp.net-mvc razor

所以我要完成的是基于传递给函数的附件列表动态创建表。如果我的“Vendor”对象有一个包含20个附件的List,我有一个生成表并循环遍历附件的函数,并将每个文件名放在表中的新单元格和行中。生成表的函数工作正常,并按预期填充表。但是,当函数从函数返回HtmlTable时,它只在Web页面上显示为System.Web.UI.HtmlControls.HtmlTable。如何让这个函数返回表而不是字符串文字?

这是我在Details.cshtml中的功能

@model EnterpriseServices.Vendor.Vendor
@using System.Web.UI.HtmlControls

@{
    ViewBag.Title = "Details";
    Layout = "~/Views/Shared/_Layout.cshtml";
    int incrementer = 1;
    TagBuilder hrTag = new TagBuilder("hr");
    TagBuilder newLineTag = new TagBuilder("br");
}

@functions {
    public static HtmlTable PopulateTable(IList<EnterpriseServices.Vendor.Attachment> attachments)
    {
        HtmlTable table = new HtmlTable();

        foreach (var a in attachments)
        {
            HtmlTableRow row = new HtmlTableRow();
            HtmlTableCell cell = new HtmlTableCell();
            cell.InnerText = Path.GetFileName(a.AttachmentPath);
            row.Cells.Add(cell);
            table.Rows.Add(row);
        }

        return table;
    }
}

以下是调用Details.cshtml中的PopulateTable()函数的代码部分:

<dt>
    @Html.DisplayNameFor(model => model.Attachments)
</dt>

<dd>
    @PopulateTable(Model.Attachments)
</dd>

以下是网页上的内容: enter image description here

2 个答案:

答案 0 :(得分:0)

您不能在MVC或Razor中使用WebForms控件。

相反,您应该使用Razor helper替换该代码,在循环中嵌入<tr><td>标记。

答案 1 :(得分:0)

使用Razor助手时SLaks是正确的。这是Razor助手的工作原理,Razor助手发布给大家参考:

@helper PopulateTable(IList<EnterpriseServices.Vendor.Attachment> attachments)
{
    <table>
        @foreach (var a in attachments)
        {
        <tr>
            <td>
                <a href="@a.AttachmentPath">@Path.GetFileName(a.AttachmentPath)</a>
            </td>
        </tr>
        }
    </table>
}