webForumDet fria alternativet

Page_Load i dynamsikt laddad kontroll

.NET

0 svar · 249 visningar · startad av renholm

Medlem sedan apr. 20012 266 inlägg
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);

	
		}
	}
262 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
127 ms — deklarationer (db)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)
125 ms — ändringar (db)