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 sender, EventArgs e)
{
Button pageinpage = new Button();
pageinpage.Text = "Clickit2";
pageinpage.ID = "pageinpageButton";
pageinpage.Click += new EventHandler(pageinpage_Click);
_testAusgabe = RenderControlOnPage(pageinpage, true);
}
protected void normalButton_Click(object sender, EventArgs e)
{
normalLabel.Text = Path.GetRandomFileName();
}
protected void pageinpage_Click(object sender, EventArgs 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 control, bool 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(page, tw, true);
string Html = tw.ToString();
int at1 = Html.IndexOf(STR_BeginRenderControlBlock);
int at2 = Html.IndexOf(STR_EndRenderControlBlock);
if (at1 > -1 && at2 > at1)
{
Html = Html.Substring(at1 + STR_BeginRenderControlBlock.Length);
Html = Html.Substring(0, at2 - at1 - STR_BeginRenderControlBlock.Length);
}
return Html;
}
}
}
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...






