C# 在html字符串中动态创建asp服务器控件,然后将其插入到aspx中

C# 在html字符串中动态创建asp服务器控件,然后将其插入到aspx中,c#,asp.net,vb.net,C#,Asp.net,Vb.net,我在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">N

我在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 €</td>
    <td align="right" fieldName="DB_Anteil_in_Prozent">29,92</td>
    <td align="right" fieldName="ABC">A</td>
</tr>
</tbody>
</table>
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);
}
到目前为止,这一切都很好

但现在我想在html中创建一个下拉控件,我可以在服务器端访问它。此控件应放置在h1和table标记之间,注释
位于该位置

我知道如何动态创建asp控件并将事件绑定到该控件,但这只有在我首先拥有aspx的情况下才有效。我无法对当时仅存在于字符串中的某个html源代码执行此操作

有没有什么方法可以满足我的要求,或者我走错了方向

提前感谢您的建议

亲切问候,,
Kai

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

大概是这样的:

<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 €</td>
    <td align="right" fieldName="DB_Anteil_in_Prozent">29,92</td>
    <td align="right" fieldName="ABC">A</td>
</tr>
</tbody>
</table>
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

编辑:如果有多个控件,我将使用此处建议的方式:

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

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

book.Controls.Add(LiteralControl1);
book.Controls.Add(DropDownList1);
book.Controls.Add(LiteralControl2);
book.Controls.Add(Button1);

首先为什么要生成html?因为我从数据库中获取了xml。然后,我使用几个xsl转换来获得所需的结果,首先是xml,然后在最后一步(描述的那一步)生成html。因此,基本上您将插入所有生成的html代码作为下拉控件的一部分?是的,但我不认为这有任何不良影响。嗯。。。它阻止我添加多个下拉列表,不是吗?因为html代码也会加倍,如果我添加另一个…您可以添加此控件一次,其他时间添加标准的DropDownList控件。是的,您是对的,此解决方案不适用于多个控件的情况。在这种情况下,我想我能帮助你。