所以我要完成的是基于传递给函数的附件列表动态创建表。如果我的“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>
答案 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>
}