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