webForumDet fria alternativet

Nested Master Page och FindControl, söker annan lösning

.NET

2 svar · 552 visningar · startad av Ledel

Medlem sedan dec. 2004736 inlägg
Frågan#1

Eftersom FindControl inte fungerar helt som jag vill när jag använder mig av Nested Master Pages söker jag nu en ny lösning.

Bygger ett CMS som bygger på Master Pages, där dessa redigeras via CMSen. Sedan trycks innehållet dit genom Master.FindControl("Control").Controls.Add(content); när en sidan laddas.

Nackdelen blir ju att detta som sagt inte fungerar med Nested Master Pages. Finns det någon annan lösning?

Medlem sedan jan. 20022 440 inlägg
#2

Du måste göra det rekursivt. Du börjar leta i den första Mästar Sidan och sedan letar dig in i nästa.

Det har med containers att göra i reguljär asp.net. För att leta i en container (asp:content, asp:panel, asp:gridview osv) så måste du alltid börja leta i rooten.

Ska ge dig ett väldigt dåligt exempel på hur man kan lösa det hela.

private Control FindControl(Control startControl, string id)
{
	if (startControl != null)
	{
		var foundControl = startControl.FindControl(id);

		if (foundControl != null)
		{
			return foundControl;
		}

		foreach (Control c in startControl.Controls)
		{
			foundControl = FindControl(c, id);
			if (foundControl != null)
			{
				return foundControl;
			}
		}
	}

	return null;
}
Medlem sedan dec. 2004736 inlägg
#3

Jaaa, har funderat och testat med det med.. Men eftersom användaren kan döpa sina kontroller till precis vad som helst, och jag inte vet någonting om detta funderade jag vidare och kom fram till att jag ska försöka:
Skapa en egen kontroll som under Init() kollar sitt eget ID (namn) och sedan (på något vis) tar reda på ID't för den sidan som nu visas. Sedan frågar den databasen själv efter sitt innehåll och stoppar in det. Har dock inte hunnit testa något, utan bara tänka. Men i mitt huvud låter det smart. För då behöver jag inte bry mig om hur en master page ser ut, i och med att mina <CustomControls:MyCustomControl ID="Content"></..:..> löser sig själva.

Edit: För i mina öron låter det som den bästa och enklaste idéen?

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