0

我在一个 asp.net 应用程序的服务器端。我在一个名为“HtmlText”的变量中有一些 html 源代码。此源代码是通过 xsl 转换从 xml 生成的,结果如下:

<h1>ABC Test KH</h1>
<!--place for the control-->
<table class="tablesorter" id="tablesorter183">
<thead>
<tr>
    <th align="left">Name</th>
    <th align="right">DB</th>
    <th align="right">DB Anteil in Prozent</th>
    <th align="right">ABC</th>
</tr>
</thead>
<tbody>
<tr>
    <td align="left" fieldName="Name">Fabrikam, Inc.</td>
    <td align="right" fieldName="DB">881.378,00 €&lt;/td>
    <td align="right" fieldName="DB_Anteil_in_Prozent">29,92</td>
    <td align="right" fieldName="ABC">A</td>
</tr>
</tbody>
</table>

现在这个源代码通过 InnerHtml 属性插入到一个 aspx 网站中。该 aspx 中有一个 id 为“book”的 div:

book.InnerHtml = HtmlText

到目前为止,这工作正常。

但现在我想在该 html 中创建一个下拉控件,我可以在服务器端访问它。此控件应放置在注释所在的 h1 和 table-tags 之间<!--place for the control-->

我知道如何动态创建 asp-control 并将事件绑定到该控件,但这仅在我首先拥有 aspx 时才有效。我不能对当时仅存在于字符串中的某些 html 源执行此操作。

有什么办法可以做我想做的事,还是我在这里走错了路?

在此先感谢您的任何建议。

亲切的问候,凯

4

1 回答 1

1

我认为唯一的解决方案是创建一个继承 DropDownList 的控件,并覆盖其 RenderControl 方法。

像这样的东西:

public override void RenderControl(HtmlTextWriter writer)
{
      //...
      //Fill in the variable HtmlText content
      //Split it to 2 variables - before and after the control place, and:

      writer.Write(startString);
      base.RenderControl(writer);
      writer.Write(endString);
}

并使用此控件代替 DropDownList。

编辑:在多个控件的情况下,我会使用这里建议的方式:Render .net controls to string and get events to fire

将字符串拆分为多个字符串 - 第一个字符串 - 从开头到第一个控件,第二个字符串 - 从第一个控件到第二个控件,依此类推。

然后将每个字符串插入一个新的 LiteralControl,并将它们添加到页面中,如下所示:

book.Controls.Add(LiteralControl1);
book.Controls.Add(DropDownList1);
book.Controls.Add(LiteralControl2);
book.Controls.Add(Button1);
于 2012-11-22T12:14:12.033 回答