Ik ga eens een poging doen mijn probleem voor te leggen:
Ik heb een web-app, die een zoekfunctionaliteit in zich heeft. Deze zoek-functionaliteit heb ik in een UserControl gebouwd, en deze wordt 4 keer onder elkaar geladen op de pagina.

De gebruiker selecteert een knop, deze opent zich, en daar wordt de zoekfunctionaliteit getoond.

Als de gebruiker gezocht heeft, en er wordt wat gevonden, dan worden de resultaten getoond in een geneste repeater. Deze wordt dan in de usercontrol getoond.

Zoals je ziet heb ik een paging-functionaliteit gebouwd. In eerste instantie gebruikte ik de PagedDataSource class, maar deze eist dat ik ineens de hele set met resultaten overhaal, en dat kunnen er misschien wel 1000 of zo zijn, en dat met een nog onbekend (lees:veel) aantal gebruikers is niet wenselijk.
De back-end is nu zo geschreven dat ik per keer dat ik een zoek-actie doe, ik het aantal resultaten dat ik wil zien kan opgeven, en de pagina uit het aantal zoekresultaten (dus pagin 10 van de zoekresultaten, als mijn pagin 5 resultaten groot is)
Die back-end functionaliteit werkt ook prima.
De paging wordt onder de zoekresultaten gezet wanneer de zoek-actie klaar is, dus wanneer de gebruiker op de Zoek-knop geklikt heeft:
De zoekresultaten plaats ik even in de view-state, en ook het paginanummer (om te kunnen tonen wat de actieve pagina is) zet ik in de viewstate.
(Ik realiseer me dat de zoekresultaten in de viewstate misschien niet zo'n nette oplossing is overigens)
In de OnInit heb ik ook een call naar de HandlePaging methode:
Dit heb ik ook in de Page_Load geprobeerd overigens
Wat is nu mijn probleem?
In de HandlePaging methode maak ik dynamisch een rits met linkbuttons aan, die de paging moeten verzorgen;
(even een snipje van de code:)
Maar.....de click doet het gewoon niet! Er vindt wel een postback plaats (partial, alles staat in een UpdatePanel) maar de methode zoekLink die ik in de Click-event gekoppeld heb wordt niet graakt.
Als ik de Guid weghaal bij het opbouwen van de ID, dan krijg ik de melding dat lb1 al bestaat. Dat snap ik misschien wel, omdat e.e.a in een usercontrol plaatsvindt, waar 4 instanties van op de pagina staan. Vandaar de Guid-toevoeging, maar ik denk dat het daar wel mee te maken heeft.
Ik weet het echt niet meer, iemand wel???
Ik heb een web-app, die een zoekfunctionaliteit in zich heeft. Deze zoek-functionaliteit heb ik in een UserControl gebouwd, en deze wordt 4 keer onder elkaar geladen op de pagina.

De gebruiker selecteert een knop, deze opent zich, en daar wordt de zoekfunctionaliteit getoond.

Als de gebruiker gezocht heeft, en er wordt wat gevonden, dan worden de resultaten getoond in een geneste repeater. Deze wordt dan in de usercontrol getoond.

Zoals je ziet heb ik een paging-functionaliteit gebouwd. In eerste instantie gebruikte ik de PagedDataSource class, maar deze eist dat ik ineens de hele set met resultaten overhaal, en dat kunnen er misschien wel 1000 of zo zijn, en dat met een nog onbekend (lees:veel) aantal gebruikers is niet wenselijk.
De back-end is nu zo geschreven dat ik per keer dat ik een zoek-actie doe, ik het aantal resultaten dat ik wil zien kan opgeven, en de pagina uit het aantal zoekresultaten (dus pagin 10 van de zoekresultaten, als mijn pagin 5 resultaten groot is)
Die back-end functionaliteit werkt ook prima.
De paging wordt onder de zoekresultaten gezet wanneer de zoek-actie klaar is, dus wanneer de gebruiker op de Zoek-knop geklikt heeft:
code:
1
2
3
4
5
6
| protected void zoekLink_Click(object sender, EventArgs e)
{
//Doe de zoekactie
//Plaats resultaten en paginanummer in property
HandlePaging(zoekresultaten.hitcount, paginanummer);
} |
De zoekresultaten plaats ik even in de view-state, en ook het paginanummer (om te kunnen tonen wat de actieve pagina is) zet ik in de viewstate.
(Ik realiseer me dat de zoekresultaten in de viewstate misschien niet zo'n nette oplossing is overigens)
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
| public int PaginaNummer
{
get
{
return (int)this.ViewState["PaginaNummer"];
}
set
{
this.ViewState["PaginaNummer"] = value;
}
}
public ZoekResultaatDTO ZoekResultaat
{
get
{
ZoekResultaatDTO zr = (ZoekResultaatDTO)this.ViewState["_ZoekResultaat"];
if (zr == null)
return null;
else
return zr;
}
set
{
this.ViewState["_ZoekResultaat"] = value;
}
} |
In de OnInit heb ik ook een call naar de HandlePaging methode:
code:
1
2
3
4
5
6
7
8
| protected override void OnInit(EventArgs e)
{
if (ZoekResultaat != null)
{
HandlePager(ZoekResultaat.HitCount, this.PaginaNummer);
base.OnInit(e);
}
} |
Dit heb ik ook in de Page_Load geprobeerd overigens
Wat is nu mijn probleem?
In de HandlePaging methode maak ik dynamisch een rits met linkbuttons aan, die de paging moeten verzorgen;
(even een snipje van de code:)
code:
1
2
3
4
5
6
7
8
9
| Panel pan = (Panel)this.FindControl("Panel1");
LinkButton hl = new LinkButton();
hl.Click += new EventHandler(zoekLink_Click);
hl.Text = i.ToString();
hl.CssClass = cls;
hl.ID = "lb_" + i + Guid.NewGuid().ToString();
pan.Controls.Add(hl); |
Maar.....de click doet het gewoon niet! Er vindt wel een postback plaats (partial, alles staat in een UpdatePanel) maar de methode zoekLink die ik in de Click-event gekoppeld heb wordt niet graakt.
Als ik de Guid weghaal bij het opbouwen van de ID, dan krijg ik de melding dat lb1 al bestaat. Dat snap ik misschien wel, omdat e.e.a in een usercontrol plaatsvindt, waar 4 instanties van op de pagina staan. Vandaar de Guid-toevoeging, maar ik denk dat het daar wel mee te maken heeft.
Ik weet het echt niet meer, iemand wel???