【问题标题】:Convert a Table to HTML in ASP.NET (c#)?在 ASP.NET (c#) 中将表格转换为 HTML?
【发布时间】:2013-12-12 01:43:30
【问题描述】:

我有一个 Table 对象,我在后面的代码中创建并填充了它。由于各种原因,必须以这种方式完成。

我通过 AJAX 从客户端调用 WebMethod 以从下拉列表中发送一个变量,然后在后面的代码中以静态方法填充表格。我需要将表格放入 ASP.Net PlaceHolder。我无法从静态方法调用 PlaceHolder。

【问题讨论】:

  • 请用更多信息扩展您的问题。目前尚不清楚您遇到的确切问题 - 您无法将表格控件放入占位符,或者您无法将数据从 Table 转换为 WebMethod 输出。
  • 我尝试将表格添加到占位符,但正如我所说,我无法从静态方法访问 plachholder。我目前正在尝试将 Table 对象转换为可以通过 WebMethod/Ajax 传递回客户端的格式
  • 我需要将表格插入 PlaceHolder 但表格是在静态方法中创建的...
  • 分享你迄今为止尝试过的代码

标签: c# asp.net jquery html-table placeholder-control


【解决方案1】:

不要使用 ASP.NET AJAX 页面方法从客户端 AJAX 调用返回数据,而是尝试使用 ASP.NET HTTP 处理程序,因为它可以让您更好地控制通过 HTTP 标头返回的内容必须对 ASP.NET AJAX 页面方法调用的结果进行编码,如下所示:

public class GetHtmlHandler : IHttpHandler
{
    public void ProcessRequest(HttpContext context)
    {
        // Grab the drop down list variable value from the query string

        // Use controls to build table or do it via StringWriter

        // Create a table row with three cells in it
        TableRow theTableRow = new TableRow();
        for (int theCellNumber = 0; theCellNumber < 3; theCellNumber++)
        {
            TableCell theTableCell = new TableCell();
            tempCell.Text = String.Format("({0})", theCellNumber);
            theTableRow.Cells.Add(theTableCell);
        }

        // Create writers to render contents of controls into
        StringWriter theStringWriter = new StringWriter();
        HtmlTextWriter theHtmlTextWriter = new HtmlTextWriter(theStringWriter);

        // Render the table row control into the writer
        theTableRow.RenderControl(theHtmlTextWriter);

        // Return the string via the StringWriter
        context.Response.Write(theStringWriter.ToString());
    }

    public bool IsReusable
    {
        get
        {
            return false;
        }
    }
}

现在在客户端,使用 jQuery .ajax() 函数调用 HTTP 处理程序,如下所示:

$(document).ready(function() {
    $.ajax({
        type: "POST",
        url: "PATH_TO_HANDLERS/GetHtmlHandler.ashx?id=YOUR_DROP_DOWN_VALUE",
        data: "{}",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function(result) {
            // Select the placeholder control by class here and put HTML into it
            $('.ThePlaceHolder').html(result);
        }
    });
}); 

注意:上述选择器要求您将CssClass 属性添加到您的PlaceHolder 控件,如下所示:

<asp:PlaceHolder id="PlaceHolder1" runat="server" CssClass="ThePlaceHolder" />

更新:

您可以使用PlaceHolderID 而不是在您的jQuery 选择器中使用class 名称,我最初建议不要这样做,因为在ASP 中使用母版页时它会受到名称修改的影响。网。无论如何,您可以使用 ClientIDMode 属性,如下所示:

<asp:PlaceHolder id="PlaceHolder1" runat="server" ClientIDMode="Static" />

现在您的 jQuery 选择器将如下所示:

// Select the placeholder control by ID here and put HTML into it
$('#<%= PlaceHolder1.ClientID %>').html(result);

注意:我希望尽可能避免使用尖括号 (&lt;%= %&gt;) 表示法。

【讨论】:

  • My Table 对象是使用 TableRow 和 TableCell 控件构建的。如何将其转换为字符串?
  • @arcadeRob - 答案已更新以显示一个表格行示例,其中三个单元格通过 StringWriterHtmlTextWriter 对象呈现为字符串。
  • 它正在工作,但我丢失了我在 C# 中添加的 CSS 和其他属性
  • @arcadeRob - 您可以切换您的 jQuery 选择器以使用 PlaceHolder 的 ID,但如果您使用母版页,则需要小心名称修改。 ClientID 解决了这个问题。查看更新的答案。
猜你喜欢
  • 2011-08-01
  • 1970-01-01
  • 2017-11-03
  • 2023-03-30
  • 2015-09-10
  • 2015-09-02
  • 2013-07-02
  • 2012-08-16
相关资源
最近更新 更多