Frågan#1
Har byggt mig en liten control som ska ladda user controls beroende vilken tab man väljer.
+-------+------+------+
|> Bla <| Bla | Bla |
+-------+------+------+---------------------------+
| |
| Laddar kontrollen här |
| |
+-------------------------------------------------+
Problemet är att de kontroller som laddas inte vill köra page_load. Vad kan det bero på, att jag skapar objekten i Render()? Eller att jag ärver från fel klass? Andra anmärkningar uppskattas också.
[DefaultProperty("Tabs"), ToolboxData("<{0}:TabContainer runat=server></{0}:TabContainer>")]
public class TabContainer : System.Web.UI.WebControls.WebControl
{
private string querystring;
private string tab_inactive_cssclass;
private string tab_active_cssclass;
private Unit padding;
private TabCollection tabs = new TabCollection();
[DefaultValue(null),
MergableProperty(false),
Bindable(true),
Category("Data"),
PersistenceMode(PersistenceMode.InnerDefaultProperty)]
public TabCollection Tabs
{
get { return tabs; }
set { tabs = value; }
}
[Bindable(true), Category("Data")]
public string Querystring
{
get { return querystring; }
set { querystring = value; }
}
[Bindable(true), Category("Appearance")]
public string TabInactiveCssClass
{
get { return tab_inactive_cssclass; }
set { tab_inactive_cssclass = value; }
}
[Bindable(true), Category("Appearance")]
public string TabActiveCssClass
{
get { return tab_active_cssclass; }
set { tab_active_cssclass = value; }
}
[Bindable(true), Category("Appearance")]
public Unit Padding
{
get { return padding; }
set { padding = value; }
}
private string ToRGBString (System.Drawing.Color color)
{
int argb = color.ToArgb();
argb = argb & 0x00FFFFFF;
return "#" + argb.ToString("X6");
}
/// <summary>
/// Render this control to the output parameter specified.
/// </summary>
/// <param name="output"> The HTML writer to write out to </param>
protected override void Render(HtmlTextWriter output)
{
string controltoload = null;
string url = Context.Request.Url.ToString();
if (url.IndexOf("?") == -1)
{
url += "?" + querystring + "=0";
}
else
{
if (url.IndexOf(querystring + "=") == -1)
{
url += "&" + querystring + "=0";
}
}
Table mt = new Table();
mt.Width = Width;
mt.CellPadding = 0;
mt.CellSpacing = 0;
TableRow row1 = new TableRow();
TableRow row2 = new TableRow();
row2.BackColor = BackColor;
foreach(Tab tab in tabs)
{
HyperLink hp = new HyperLink();
hp.Text = tab.Title;
hp.NavigateUrl = Regex.Replace(url, querystring + "=[0-9]", querystring + "=" + tab.Ident.ToString(), RegexOptions.IgnoreCase);
TableCell cell = new TableCell();
if (Context.Request.QueryString[querystring] == null)
{
if (tab.Ident == tabs[0].Ident)
{
controltoload = tab.Control;
cell.CssClass = tab_active_cssclass;
hp.NavigateUrl = null;
}
else
cell.CssClass = tab_inactive_cssclass;
}
else
{
if (tab.Ident == int.Parse(Context.Request.QueryString[querystring]))
{
controltoload = tab.Control;
cell.CssClass = tab_active_cssclass;
hp.NavigateUrl = null;
}
else
cell.CssClass = tab_inactive_cssclass;
}
cell.Controls.Add(hp);
row1.Cells.Add(cell);
}
TableCell cell1 = new TableCell();
cell1.Width = Unit.Parse("100%");
cell1.Attributes.Add("style", "BORDER-BOTTOM: solid 1px " + ToRGBString(BorderColor));
TableCell cell2 = new TableCell();
cell2.ColumnSpan = tabs.Count + 2;
cell2.Attributes.Add("style", string.Format("BORDER-BOTTOM: solid 1px {0}; BORDER-LEFT: solid 1px {0}; BORDER-RIGHT: solid 1px {0};", ToRGBString(BorderColor)));
Panel ph = new Panel();
ph.Attributes.Add("style", string.Format("MARGIN: {0}", padding));
ph.Controls.Add(Page.LoadControl(controltoload));
cell2.Controls.Add(ph);
row1.Cells.Add(cell1);
row2.Cells.Add(cell2);
mt.Rows.Add(row1);
mt.Rows.Add(row2);
mt.RenderControl(output);
}
}