ASP.Net dynamisches Control ohne Placeholder

06/16/2013 12:22 -AmA-#1
Nun ich habe folgendes Problem.
Ich möchte ein Control, also z.B. ein Button dynamisch in ASP.Net erstellen.
Wie man dies mit den Placeholder Controls macht ist mir klar.
Nur ist es in meinem Fall nicht möglich da ich das Control in einem anderen Control will, welches nur HTML aus Ausgabe akzeptiert.
Ich habe schon nach Lösungen gesucht, hier ist mein aktueller Ansatz:

index.aspx:
HTML Code:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="index.aspx.cs" Inherits="DynamicButton.index" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <p>Normal Button:</p>
        <asp:Button runat="server" ID="normalButton" Text="Clickit" OnClick="normalButton_Click" />
        <p>Ergebnis:</p>
        <asp:Label runat="server" ID="normalLabel"></asp:Label>
    </div>
    <div>
        <p>Dynamic Button</p>
        <% = _testAusgabe %>
        <p>Ergebnis:</p>
        <asp:Label runat="server" ID="dynamicLabel"></asp:Label>
    </div>    
    </form>
</body>
</html>
PHP Code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.IO;
using System.Web.UI.HtmlControls;

namespace 
DynamicButton
{
    public 
partial class index System.Web.UI.Page
    
{
        protected 
string _testAusgabe;

        protected 
void Page_Load(object senderEventArgs e)
        {
            
Button pageinpage = new Button();
            
pageinpage.Text "Clickit2";
            
pageinpage.ID "pageinpageButton";
            
pageinpage.Click += new EventHandler(pageinpage_Click);
            
_testAusgabe RenderControlOnPage(pageinpagetrue);
        }

        protected 
void normalButton_Click(object senderEventArgs e)
        {
            
normalLabel.Text Path.GetRandomFileName();
        }

        protected 
void pageinpage_Click(object senderEventArgs e)
        {
            
dynamicLabel.Text Path.GetRandomFileName();
        }

        static 
string RenderControl(Control control)
        {
            
StringWriter tw = new StringWriter();

            
Html32TextWriter writer = new Html32TextWriter(tw);
            
control.RenderControl(writer);
            
writer.Close();

            return 
tw.ToString();
        }

        static 
string RenderControlOnPage(Control controlbool useDynamicPage)
        {
            if (!
useDynamicPage)
                return 
RenderControl(control);

            const 
string STR_BeginRenderControlBlock "<!-- BEGIN RENDERCONTROL BLOCK -->";
            const 
string STR_EndRenderControlBlock "<!-- END RENDERCONTROL BLOCK -->";

            
StringWriter tw = new StringWriter();
      
            
Page page = new Page();
            
page.EnableViewState false;

            
HtmlForm form = new HtmlForm();
            
form.ID "__t";
            
page.Controls.Add(form);
            
form.Controls.Add(new LiteralControl(STR_BeginRenderControlBlock));
            
form.Controls.Add(control);
            
form.Controls.Add(new LiteralControl(STR_EndRenderControlBlock));

            
HttpContext.Current.Server.Execute(pagetwtrue);

            
string Html tw.ToString();

            
int at1 Html.IndexOf(STR_BeginRenderControlBlock);
            
int at2 Html.IndexOf(STR_EndRenderControlBlock);
            if (
at1 > -&& at2 at1)
            {
                
Html Html.Substring(at1 STR_BeginRenderControlBlock.Length);
                
Html Html.Substring(0at2 at1 STR_BeginRenderControlBlock.Length);
            }

            return 
Html;
        }
    }

Eigentlich ist es ja klar, das der nicht funktionieren kann. Schliesslich wird der dynamische Button quasi in einer eigenen Umgebung mit eigenem Viewstate und Eventvalidation erstellt.
Aus diesem Grund, wird das Event auch nicht ausgeführt.
Mein Ansatz, kann aber (hoffentlich) nicht komplett falsch sein.

Schon mal Danke für jegliche Hilfe, Ansätze und Kommentare...
06/16/2013 18:31 MrSm!th#2
#moved