allora diciamo che il tuo repeater all'interno dello user control sia questo
codice:
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="WebUserControl.ascx.cs" Inherits="WebUserControl" %>
<asp:Repeater ID="MenuRepeater" runat="server" onitemdatabound="MenuRepeater_ItemDataBound">
<HeaderTemplate>
<div class="ContenitoreDiv">
</HeaderTemplate>
<ItemTemplate>
<div runat="server" id="ContenitoreVoce" style="margin:5px 0px;">
<asp:HyperLink ID="VoceMenuHyperLink" NavigateUrl='<%#Eval("Link")%>' Text='<%#Eval("Testo")%>' runat="server"></asp:HyperLink>
</div>
</ItemTemplate>
<FooterTemplate>
</div></FooterTemplate>
</asp:Repeater>
come vedi per ogni elemento stampa un div con dentro un link.
Nel WebUserControl.ascx.cs invece avrai
codice:
public partial class WebUserControl : System.Web.UI.UserControl
{
private eMenu _SelectedMenu;
public eMenu SelectedMenu {//Server per impostare il link corrente
get { return _SelectedMenu; }
set
{
_SelectedMenu = value;
List<VoceMenu> menu = new List<VoceMenu>();
menu.Add( new VoceMenu { Testo="Primo" , Link="http://www.html.it" , voce = eMenu.nomelink1});
menu.Add(new VoceMenu { Testo = "Secondo", Link = "http://www.html.it", voce = eMenu.nomelink2 });
menu.Add(new VoceMenu { Testo = "Terzo", Link = "http://www.html.it", voce = eMenu.nomelink3 });
MenuRepeater.DataSource = menu;
MenuRepeater.DataBind();
}
}
protected void Page_Load(object sender, EventArgs e)
{
}
protected void MenuRepeater_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
VoceMenu VoceMenu = (VoceMenu)e.Item.DataItem;
if (VoceMenu != null && VoceMenu.voce == this.SelectedMenu)
{
((HyperLink)e.Item.FindControl("VoceMenuHyperLink")).ForeColor = System.Drawing.Color.Red;
}
}
}
public enum eMenu
{ nomelink1, nomelink2, nomelink3 }
public class VoceMenu
{
public string Testo { get; set; }
public string Link { get; set; }
public eMenu voce;
}
La classe VoceMenu ti serve come aggregatore di informazioni relative ad un singolo elemento del menu (Il repeater legge le proprieta testo e link per binadarle nel codice html).
Nel OnItemDataBaund del repeater invece viene controllato se l'oggetto che è stato bindato è quello selezionato ed in tal caso puoi prendere qualsiasi oggetto presente al suo interno e modificarlo (attenzione al cast) ... io ho cambiato il colore del link ma puoi fare quello che vuoi
OKK pronti ad utilizzare la componente
Default.aspx
codice:
...
<%@ Register TagPrefix="MyCtrl" TagName="Menu" Src="~/WebUserControl.ascx" %>
...
<body>
<form id="form1" runat="server">
<div>
<MyCtrl:Menu runat="server" SelectedMenu="nomelink2" id="Menu"></MyCtrl:Menu>
</div>
</form>
</body>
come vedi per selezionare il link corrente ti basta cambiare la proprietà SelectedMenu del tag <MyCtrl:Menu ...>
dimmi cosa ne pensi