Avatar billede neoman Novice
27. april 2007 - 19:35 Der er 10 kommentarer og
1 løsning

ImageButton i UpdatePanel virker ikke som den skal

Jeg har bruger en masse ImageButtons og  det hele virker fint. Det øjeblik jeg lægger min tabel, som har en masse af disse buttons, ind i en UpdatePanel så får jeg postback, men det hele strander et eller andet sted , og min click handler bliver ikke kaldt.

Det er tilsyneladende et kendt problem, og jeg har prøvet de første to løsninger outlinet her : http://forums.asp.net/thread/1450669.aspx

Er der nogen som har et godt trick ? Jeg mindes noget om at have set  en artikel, hvor man laver en almindelig trykknap, vist nok udenfor UpdatePanelet og binder ImageButton eventet til den - men nu kan jeg naturligis ikke finde artiklen igen :-(
Avatar billede dr_chaos Nybegynder
27. april 2007 - 19:40 #1
Noget i denne stil:
<div>
    <asp:ImageButton ID="Button1"
                Text="Refresh Panel"
                runat="server" />
    <asp:ScriptManager ID="ScriptManager1"
                      runat="server" />
    <asp:UpdatePanel ID="UpdatePanel1"
                    UpdateMode="Conditional"
                    runat="server">
                    <Triggers>
                      <asp:AsyncPostBackTrigger ControlID="Button1" />
                    </Triggers>
                    <ContentTemplate>
                    <fieldset>
                    <legend>UpdatePanel content</legend>
                    <%=DateTime.Now.ToString() %>
                    </fieldset>
                    </ContentTemplate>
    </asp:UpdatePanel>

    </div>
Avatar billede neoman Novice
27. april 2007 - 19:51 #2
Øh det er ikke helt dét - min ImageButton er INDE i tabellen :
<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
        <ContentTemplate>
        <asp:table id="Table1"  runat="server"  CssClass="Roster">
        </asp:table>
        </ContentTemplate>
</asp:UpdatePanel>

Og Table1 bliver tegnet dynamisk (samt på hver postback) og på det tidspunkt får mange ImageButtons. De virker fint når jeg klikker på dem, men det øjeblik jeg lægger en UpdatePanel rundt om Tabel1 så virker de ikke mere. Der sker et eller andet, idet min ProgressIndicator kører når jeg klikker, men den handler som hver ImageButton har bliver ikke kaldt.
Avatar billede dr_chaos Nybegynder
27. april 2007 - 19:58 #3
prøv evt med UpdateMode="Always"
Avatar billede dr_chaos Nybegynder
27. april 2007 - 20:00 #4
Du skal nok prøve at tilføje <asp:AsyncPostBackTrigger ControlID="SearchButton" />
Fra codebehind.
Kan ikke lave et test her da jeg ikke har ajax på min comp.
Er der en function som bliver kaldt for hver imagebutton eller et event ?
Avatar billede neoman Novice
27. april 2007 - 20:16 #5
Har prøvet ændre UpdateMode.  MinTabel1 kan indeholde 300 imageebuttons , og jeg har ingen anelse om hvilken af dem der trigger postback. Problemet er som sagt ikke nyt, og folk har fundet på forskellige workarounds (hvoraf de simple ikke virker for mig)

Jeg har en tabel med måske 300 imagebuttons, hvor hver button er tilføjet til en celle med minTabelCelle.Controls.Add(minImageKnap), og har ingen anelse hvilken af dem der har trigget.  Jeg tilføjer også dynamisk en OnCommand eventhandler for hver af disse buttons, hvor jeg i min handler kigger på ComamndName og CommandArguments. Det fungerer perfekt når tabellen er udenfor UpdatePanel - indenfor bliver eventet ikke trigget.

Foreslår du at for hver af disse buttons også definere dem som triggers når jeg kreerer dem ? Jeg havde indtrykket af, at de automatisk skulel tigge en update, så snart de ligger indenfor UpdatePanelet. I øvrigt, i og med at der tilsyneladende sker noget postback ( da min ProgressPanel viser sig et kort øjeblik) - så kunne det tyde på, at der er problemer med at læse knappens information (som beskrevet i den artikel jeg henviste til).
Avatar billede neoman Novice
27. april 2007 - 20:51 #7
Tak for linket - det er lige på kanten af havd jeg fatter: Jeg ahr før haft brug for at få fat i ComamndArgument fra Request objektet, men løb sur i det, fordi jeg ikke helt har styr på at genskabe kontroller som var begravet i tabelceller, samt hvad der så sker efterfølgende.

Anyways, det lyder som noget der kunne virke, for når jeg ved hvilken knap lavede noget, så kan jeg jo selv kalde handleren. Men jeg fatter ikke helt hvad der sker, blot fordi jeg kører med UpdatePanel. Jeg har problemet med at kigge in i Request objektet - uden UpdatePanel kan jeg se at en ImageButton kalder, når jeg sætter break point i min Page Load. Skal lige finde en break point som også virker når jeg har UpdtaePanel indblandet og se o mder er noget i min Request objekt. for postback får jeg i hvertfald.
Avatar billede neoman Novice
27. april 2007 - 20:57 #8
Nu har jeg steppet igennem det - min ImageButton er i Request objektet, men OnCommand handleren bliver slet ikke kaldt.
Avatar billede neoman Novice
27. april 2007 - 21:26 #9
Fandt løsningen på dette problem i hvertfald :

Min imagebutton IMG får et ID ved oprettelsen:

IMG.ID = EtTal.tostring & "+" EtAndetTal.tostring

Inde i Request-objektet kunne jeg se at "+" var pist væk. I min OnCommand handler (som af en eller anden årsag aldrig blev kaldt) bruger jeg "+" til at finde værdien af de to tal i ID'en.

Nu har jeg erstattet "+" med "?" og NU det virker !  AJAX kunne åbenbart ikke lide "+" :-)


dr_chaos læg et svar, så jeg kan give dig lidt points som tak for hjælpen.
Avatar billede neoman Novice
27. april 2007 - 21:31 #10
og naturligvis, hvis ID'et ændrede sig , så kunne systemet jo ikke finde knappen efter postback, og dermed heller ikke den handler som hørte til.
Avatar billede dr_chaos Nybegynder
28. april 2007 - 19:40 #11
Svar :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester