MasterPage button IndexOutOfRange

giovedì 05 febbraio 2009 - 08.32

frankhead Profilo | Newbie

Buongiorno,
ho una master page in cui c'è un topicbar che viene caricato dianamicamente in base all'utente che accede.
attraverso la topicbar accedo ad altre pagine aspx che contengono, fra gli altri, i controlli button
quando clicco su uno di questi controlli button mi ritorna l'errore IndexOutOfRange.

il suddetto errore non appare se non carico dinamicamente la topicbar

Qualcuno sa aiutarmi?

Jeremy Profilo | Guru

Secondo me in qualche riga del tuo codice non stai tenendo conto dell'indice a base 0.
Se posti il codice vediamo se ho ragione.

Facci sapere...
Ciao

[edit]
Anzi....rileggendo questa riga
>il suddetto errore non appare se non carico dinamicamente la topicbar
credo proprio di aver ragione.
[/endedit]

frankhead Profilo | Newbie

questo è il codice che carica il menu

IntranetDataContext _dc;
HandleDB _hDB;

protected void Page_Load(object sender, EventArgs e)
{
_hDB = new HandleDB();
_dc = new IntranetDataContext(_hDB.mCcnnString);
TheMenu.Groups.Clear();

BuildMenu(User());

TheMenu.ViewStyle = PresentationEnum.Standard;
}

private string User()
{
WindowsIdentity UserIdentityInfo = WindowsIdentity.GetCurrent();

return UserIdentityInfo.Name.Replace("CEI\\", "");
}

private void BuildMenu(string u)
{
var qry = _dc.spGetMenuItems(u, "1");

foreach (var t in qry)
{
C1WebTopicBarGroup group = new C1.Web.Command.C1WebTopicBarGroup(t.Gruppo);

try
{
SetMenuItems(u, group, t.Codice);
}
catch (Exception ex)
{
//lblErr.Text = "Sottomenù " + ex.Message;
}

TheMenu.Groups.Add(group);
group.Collapsed = true;
}

}

private void SetMenuItems(string u, C1WebTopicBarGroup g, string codG)
{
var items = _dc.spGetMenuItems(u, codG);

foreach (var ii in items)
{
C1WebTopicBarItem item = new C1.Web.Command.C1WebTopicBarItem(ii.Sottogruppo);
item.NavigateUrl = ii.URL;
g.Items.Add(item);
}
}

Jeremy Profilo | Guru

Questa riga:
>C1WebTopicBarGroup group = new C1.Web.Command.C1WebTopicBarGroup(t.Gruppo);

prova a sostituirla con questa:
C1WebTopicBarGroup group = new C1.Web.Command.C1WebTopicBarGroup(array.indexof(qry,t));

Altrimenti dicci almeno a quale riga di codice viene sollevata l'eccezzione.

Facci sapere...
Ciao

frankhead Profilo | Newbie

il problema è proprio questo
l'eccezione non viene trappata,
nel click del bottone della pagina che carico
non ci arrivo neanche

Jeremy Profilo | Guru

Dalla tua risposta deduco che il problema non è risolto...

Non viene 'trappata' perchè sei tu che non dai la possibilità al debugger di farti vedere dov'è l'errore.
Prova a sostituire questa parte di codice al tuo.

try { SetMenuItems(u, group, t.Codice); } catch (Exception ex) { throw }


frankhead Profilo | Newbie

ma l'errore non viene generato dal menu

Jeremy Profilo | Guru

Allora...dovresti spiegarti meglio perchè non ho capito....
L'errore che ricevi indica che stai tentando di accedere ad un elemento di un array il quale indice non fa parte della sua dimensione(fuori dai limiti).

In Debug(cazzarola serve proprio a quello) dovresti trovare in quale riga ti viene sollevata questa eccezzione.

Prova a mettere un break point all'inizio del tuo programma e, da qual punto in poi, prova ad eseguirlo passo passo con F11....
Se non si interrompe, vuol dire che il problema non è in questa pagina.

Spiega magari un pò meglio lo scenario.
E comunque....in quel costrutto Try...Catch.....o gestisci l'errore(e allora ha senso di esistere) oppure lo togli o ci scrivi throw.

Facci sapere...
Ciao.

frankhead Profilo | Newbie

come puoi notare
il menu viene caricato dianamicamente

ad ogni voce caricata viene asseganata una pagina da visualizzare ok?
in queste pagine ci sono dei bottoni
al click di questi bottoni viene generato l'errore, ma nell'evento click
nemmeno ci arriva.

capito adesso?

Jeremy Profilo | Guru

Quindi ....vuol dire che l'errore è nella COSTRUZIONE DEL MENU!!!!.
Solo eseguendolo passo passo e controllando il valore delle variabili nella finestra immediata potrai capire dov'è l'errore.
Ma questo lo puoi fare solo tu, perchè la libreria dei componenti di ComponentOne io non ce l'ho.

Quindi se riusciamo a scrivere dei post dove io o altri ti diamo delle indicazioni....tu le provi e poi ci aggiorni....oppure sarà dura vanire ad un dunque.
Se parti dal preconcetto che tu sai dove NON E' l'errore.....non ce la caviamo più.

In ogni caso....un'altro consiglio che potrei darti è questo.
Invece di scrivere il codice così:
var items = _dc.spGetMenuItems(u, codG); foreach (var ii in items)

scrivilo così:
foreach (Item ii in _dc.spGetMenuItems(u, codG);)

Per il resto fai le tue considerazioni e poi ....facci sapere
Ciao

frankhead Profilo | Newbie

Grazie
Ciao
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5