我想以编程方式在Web服务的代码中构建一个HtmlTable / Table,并将其作为HTML字符串返回,以便可以使用JavaScript将其写入span / div /的内部HTML
类似于以下内容:
//webservice.amsx.cs Build the table, called by another/different method
protected string Table_Maker()
{
HtmlTable tbl = new HtmlTable();
HtmlTableCell cell = new HtmlTableCell();
HtmlTableRow row = new HtmlTableRow();
cell.InnerText = "WhateverText";
row.Cells.Add(cell);
tbl.Rows.Add(row);
return tbl.ToString();
}
//somepage.aspx write table to the div
function menuHelper(toplayer, toplayernumber)
{
var sublayertable;
var sublayerpostcompileID;
var toplayernumber;
menuHelper_Part1();
function menuHelper_Part1()
{
//replace ucMainMenu with ucMainMenu_pnlContent
sublayerpostcompileID = toplayer.replace("ucMainMenu", "ucMainMenu_pnlContent");
//Call the webmethod
webbernetz.MenuHelperWebService.Sub_Menu_Helper(toplayernumber, menuHelper_Part2);
}
function menuHelper_Part2(result){
//Write the result to the target area
document.getElementById(sublayerpostcompileID).innerHTML = result;
}
}
当我将它返回到javascript时,javascript只是写“System.Web.UI.HtmlControls.HtmlTable”。
我怎样才能写出实际的表格?
答案 0 :(得分:2)
您的代码唯一的问题是使用“tbl.ToString()”。
正如其他一些帖子所述,您应该使用HtmlTextWriter将表控件渲染到StringBuilder对象,然后可以为您的方法返回字符串值。像这样:
protected string Table_Maker() {
HtmlTable tbl = new HtmlTable();
HtmlTableCell cell = new HtmlTableCell();
HtmlTableRow row = new HtmlTableRow();
cell.InnerText = "WhateverText";
row.Cells.Add(cell);
tbl.Rows.Add(row);
StringBuilder sb = new StringBuilder();
using( StringWriter sw = new StringWriter( sb ) ) {
using( HtmlTextWriter tw = new HtmlTextWriter( sw ) ) {
tbl.RenderControl( tw );
}
}
return sb.ToString();
}
这应该返回要插入页面的HTML。
答案 1 :(得分:0)
您可以在任何控件上调用RenderControl()方法。或者如果你没有使用HtmlTable做任何事情,那么构建HTML然后使用HtmlTextWriter。
答案 2 :(得分:0)
这里的问题是您使用的HtmlTable.ToString
方法不适合您想要的方法。 'ToString'返回表示当前Object的String。在这种情况下,您必须先将Render
表格放到HTMLTextWriter上,然后才能使用方法ToString
。
答案 3 :(得分:0)
只需使用tbl.InnerHtml,而不是ToString
答案 4 :(得分:0)
听起来你正在使它变得比它需要的更复杂。如何不使用HtmlTable对象,只是构建一个包含您需要输出的html的字符串。