webForumDet fria alternativet

Visa att man är på en sida

.NET

21 svar · 611 visningar · startad av echoSwe · sida 2 av 2

Frågan, av echoSwe

Hej! Jag ställer en snabb fråga: säg att jag har en meny - hur sätter jag class="active" på rätt listitem \<li\> på smidigast möjliga sätt? Följdfråga: Hur gör man samma sak, fast man väljer istället vilken javascript funktion som ska anropas?

Läs frågan i sin helhet →
Medlem sedan nov. 20041 189 inlägg
#21

Lösning som jag stannade vid för tillfället var den som jag skrev om i C# faktiskt... (den som finns tidigare upp i tråden)

En sak bara - detta förutsätter ju faktiskt att man alltid bifogar ett id med alla länkar. Kan man xml-parsa xhtml dokumentet och leta upp alla länkar innan det skickas ut och automatiskt lägga dit id eller nåt?

ahlen skrev:

Hmm, ge administratörs rättigheter till VB.net koden?! Eller vad menar du? ;-)

Nej, jag menar - hur skriver man om den här koden:

pHolder.Controls.Add ul
foreach (myDataRow in myDataSet.Tables["meny"].Rows) 
//för att använda datarows måste man väl använda 
//en adapter till att få datan? (en OleDbDataReader funkar väl inte)
{
pHolder.Controls.Add li
pHolder.Controls.Add HyperLink h;
h.Text = MyDataRow["text"];
h.Navigateurl = MyDataRow["address"];
    if (Request.Querystring["ID"] = MyDataRow["linkID"]
{
h.Attributes.Add("class","active");

}
}

så att den fungerar?

renholm: jo, kanske det - du har inte möjligtvis något exempel?

//Henke

Medlem sedan apr. 20012 266 inlägg
#22

Ett exempel:

protected override void Render(HtmlTextWriter writer)
		{
			WriteNodes(NodeContext.CurrentSite.SelectNodes(path), writer);
		}

		private void WriteNodes(TreeNodeCollection nodes, HtmlTextWriter writer)
		{
			if (nodes.Count > 0)
			{
				foreach(string key in Style.Keys)
					writer.AddStyleAttribute(key, Style[key]);
				if (this.CssClass != null)
					writer.AddAttribute(HtmlTextWriterAttribute.Class, this.CssClass);

				writer.RenderBeginTag("ul");
				foreach(Altais.Framework.Nodes.TreeNode node in nodes)
				{				
					if (node.Visible)
					{
						bool selected = false;
						if (selectedpath == null)
						{
							if (node.ID == NodeContext.CurrentNode.ID)
								selected = true;
						}
						else
						{
							if (node.ID == NodeContext.CurrentSite.Select(selectedpath).ID)
								selected = true;
						}

						if (selected && this.selecteditemcssclass != null)
							writer.AddAttribute(HtmlTextWriterAttribute.Class, this.selecteditemcssclass);
						else if (this.itemcssclass != null)
							writer.AddAttribute(HtmlTextWriterAttribute.Class, this.itemcssclass);

						writer.RenderBeginTag("li");

						NavigationItemTemplate item = new NavigationItemTemplate(node, selected);
						itemtemplate.InstantiateIn(item);
						item.RenderControl(writer);
						
						writer.RenderEndTag();
						writer.WriteLine();
				
						if (mode == Mode.Tree)
							WriteNodes(node.Nodes, writer);
					}
				}
				writer.RenderEndTag();
			}
		}

I detta exempel används ett bakomliggande ramverk för sidhantering som kontrollen sedan skriver ut beroende på vilken path som är angiven. Används enligt nedan:

<cc1:Navigation id="nav2" Mode="Flat" CssClass="nav_1level" SelectedItemCssClass="selected" runat="server">
	<ItemTemplate>
		<a href='<%# Page.ResolveUrl(Container.NavigationUrl) %>'><%# Container.Node.Name %></a>
	</ItemTemplate>
</cc1:Navigation>
259 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
123 ms — deklarationer (db)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)
122 ms — ändringar (db)