Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何获取从函数返回的HtmlTable以显示在.cshtml文件中_C#_Asp.net Mvc_Razor - Fatal编程技术网

C# 如何获取从函数返回的HtmlTable以显示在.cshtml文件中

C# 如何获取从函数返回的HtmlTable以显示在.cshtml文件中,c#,asp.net-mvc,razor,C#,Asp.net Mvc,Razor,因此,我试图实现的是基于传递给函数的附件列表动态创建一个表。如果我的“Vendor”对象有一个包含20个附件的列表,那么我有一个函数,该函数生成一个表,循环遍历附件,并将每个文件名放在表中的一个新单元格和一行中。生成表的函数工作正常,并按预期填充表。但是,当函数从函数返回HtmlTable时,它仅在网页上显示为System.web.UI.HtmlControl.HtmlTable。如何使此函数返回表而不是字符串文本 下面是我在Details.cshtml中的函数 @model Enterpris

因此,我试图实现的是基于传递给函数的附件列表动态创建一个表。如果我的“Vendor”对象有一个包含20个附件的列表,那么我有一个函数,该函数生成一个表,循环遍历附件,并将每个文件名放在表中的一个新单元格和一行中。生成表的函数工作正常,并按预期填充表。但是,当函数从函数返回HtmlTable时,它仅在网页上显示为System.web.UI.HtmlControl.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;
    }
}
@model enterpriseseservices.Vendor.Vendor
@使用System.Web.UI.HTMLControl
@{
ViewBag.Title=“详细信息”;
Layout=“~/Views/Shared/_Layout.cshtml”;
递增整数=1;
标记生成器hrTag=新标记生成器(“hr”);
TagBuilder newLineTag=新的TagBuilder(“br”);
}
@功能{
公共静态HtmlTable PopulateTable(IList附件)
{
HtmlTable=新的HtmlTable();
foreach(附件中的变量a)
{
HtmlTableRow行=新的HtmlTableRow();
HtmlTableCell=新的HtmlTableCell();
cell.InnerText=Path.GetFileName(a.AttachmentPath);
行.单元格.添加(单元格);
table.Rows.Add(行);
}
返回表;
}
}
下面是调用Details.cshtml中的PopulateTable()函数的代码部分:

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

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

@DisplayNameFor(model=>model.Attachments)
@PopulateTable(模型附件)
以下是在网页上显示的内容:
您不能在MVC或Razor中使用WebForms控件


相反,您应该将该代码替换为,在循环中嵌入
标记。

SLaks使用Razor helper是正确的。以下是工作的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>
}
@helper PopulateTable(IList附件)
{
@foreach(附件中的变量a)
{
}
}

您不能在MVC或Razor中使用WebForms控件。你应该用简单的Razor HTML块替换这些代码。我不知道剃须刀助手是什么,但我现在就去查一下。谢谢,这很有效。我将该功能更改为带有嵌入式和标签的Razor助手,它工作得非常好;您只需编写
href=“@a.AttachmentPath”
并删除该变量即可。