Question:
How to load HTML into web server control?How to build a composite server control from loaded Html in Asp.Net?
Create WebServerControls dynamically from Html.
Answer:
Inherit from CompositeControl or WebControl.Implement INamingContainer to route postback events to the right controls.
Override the CreateChildControls method and call
. Page.ParseControl(youHtml); ...
In WebControls you have to call EnsureChildControls before accessing children.
The CompositeControl ensures this by itself.
Here is an example
public class CustomLayoutControl : CompositeControl, INamingContainer
{
[Category("Behavior")]
public string ContentPath
{
get
{
String s = (String)ViewState["ContentPath"];
return s;
}
set
{
ViewState["ContentPath"] = value;
}
}
protected string TemplateContent
{
get
{
string content = ViewState["TemplateContent"] as string;
if (content == null)
{
content = ReadContentFile();
ViewState["TemplateContent"] = content;
}
return content;
}
set
{
ViewState["TemplateContent"] = value;
}
}
private string ReadContentFile()
{
string temp = "";
if (!string.IsNullOrEmpty(ContentPath))
{
string path = MapPathSecure(ContentPath);
if (File.Exists(path))
{
using (StreamReader sReader = new StreamReader(path))
{
temp = sReader.ReadToEnd();
}
}
else { /* TODO: log path is wrong */ }
}
else { /* TODO: log error: content path is not set */}
return temp;
}
protected override void OnLoad(EventArgs e)
{
EnsureChildControls();
base.OnLoad(e);
}
///
/// Reads the template
///
protected override void CreateChildControls()
{
Control control = Page.ParseControl(TemplateContent);
this.Controls.Add(control);
base.CreateChildControls();
}
}
No comments:
Post a Comment