webForumDet fria alternativet

Button events i asp repeater

.NETur .NET

8 svar · 592 visningar · startad av mo:d:fi

Medlem sedan jan. 200475 inlägg
Frågan#1

Hallåj!

Är det någon som lekt runt med asp repeaters och fått knapptryckningar att fungera därifrån?
har en repeater som ser ut så här:

<asp:Repeater ID="guestbookRepeater" runat="server" OnItemDataBound="guestbookRepeater_ItemDataBound" OnItemCommand="guestbookRepeater_ItemCommand">

och mina knappar ser ut så här:

<asp:Button ID="reportButton" runat="server" Text="Anmäl" CommandName="report" CommandArgument='<%#DataBinder.Eval(Container.DataItem, "guestbookID") %>' />
            <asp:Button ID="removeButton" runat="server" Text="Ta bort" Visible="false" CommandName="remove" CommandArgument='<%#DataBinder.Eval(Container.DataItem, "guestbookID") %>' />
            <asp:Button ID="answerButton" runat="server" Text="Svara" Visible="false" CommandName="answer" CommandArgument='<%#DataBinder.Eval(Container.DataItem, "userNumber") %>' />

Sedan ser min funktion ut såhär:

protected void guestbookRepeater_ItemCommand(object source, RepeaterCommandEventArgs e)
    {
        Response.Write(e.CommandName);
        switch (e.CommandName)
        {
            case "remove":
                UserClass.removeGuestbookPost((Int64)e.CommandArgument);
                Response.Write(((Int64)e.CommandArgument).ToString() + "Test");
                break;
            case "answer":

                break;
            case "report":
                UserClass.reportGuestbookPost((Int64)e.CommandArgument);
                break;
        }
    }

Men jag får aldrig någon utskrift av Response.Write så jag antar att den funktionen aldrig körs. Först fick jag massa strul med EnableEventValidation som dom tyckte skulle sättas till true men gjorde man det återstod felet så jag satte den till false. sidan laddar om när man trycker på en knapp osv men inget annat händer dessvärre x(
Någon som har några ideer runt omkring?

Detta är det felmeddelande som uppstår när man klickat på en knapp:

Invalid postback or callback argument. Event validation is enabled using <pages enableEventValidation="true"/> in configuration or <%@ Page EnableEventValidation="true" %> in a page. For security purposes, this feature verifies that arguments to postback or callback events originate from the server control that originally rendered them. If the data is valid and expected, use the ClientScriptManager.RegisterForEventValidation method in order to register the postback or callback data for validation.

Medlem sedan jan. 200475 inlägg
#2

Kanske skall påpeka att jag använder en Master page oxå så denna sida ligger inuti en asp:content men det borde ju inte spela någon roll.
använder mig ju även av ItemDataBound eventet och det fungerar smärtfritt.

Medlem sedan sep. 20011 914 inlägg
#3

Det klassiska är väl att man inte har !IsPostBack.

void Page_Load(object sender, EventArgs e)
{
   if(!IsPostBack)
      Bind();
}

private void Bind()
{
   //Bind repeater
}
Medlem sedan jan. 200475 inlägg
#4

Du har så rätt :r
och precis när jag skulle stoltsera med att jag löst det så har du redan skrivit det :p

men en liten funderare som jag har, eftersom jag inte kan ladda om den data som skall fylla repeatern i Page_Load funktionen längre hur skall jag göra så att sidan "uppdateras" med de nya värdena när ItemCommand eventet är avklarat? Någon smidig och snygg lösning?

Medlem sedan jan. 200475 inlägg
#5

Du har så rätt :r
och precis när jag skulle stoltsera med att jag löst det så har du redan skrivit det :p

men en liten funderare som jag har, eftersom jag inte kan ladda om den data som skall fylla repeatern i Page_Load funktionen längre hur skall jag göra så att sidan "uppdateras" med de nya värdena när ItemCommand eventet är avklarat? Någon smidig och snygg lösning?

om det ser ut nu så kör jag i stort sett igenom samma kod med databasanrop precis i slutet på ItemCommand hanteraren som jag gör i page_load'en

Medlem sedan dec. 19996 721 inlägg
#6

Kör Bind() efter (i) ItemCommand

Medlem sedan jan. 200475 inlägg
#7

Tack för tipsen, nu är allting uppe och snurrar iaf.
olyckligtvis fick det bli inte mindre än tre stycken olika "Bind()" funktioner för
att implementera "fusk-Paging" i MS SQL utan att skapa temporära tabeller i databasen och att få till framåt- och bakåtknapparna vid rätt tillfällen.

Medlem sedan dec. 19996 721 inlägg
#8

mo:d:fi skrev:

olyckligtvis fick det bli inte mindre än tre stycken olika "Bind()" funktioner för
att implementera "fusk-Paging" i MS SQL utan att skapa temporära tabeller i databasen och att få till framåt- och bakåtknapparna vid rätt tillfällen.

Vadan detta? Det låter onödigt.

Medlem sedan jan. 200475 inlägg
#9

jo kanske men att ha för stor avkodning av specialfall i samma funktion kändes för kladdigt.
Implementerade "fusk-paging" genom två olika SP's bl.a. för att få till allting perfekt i slutändan så det fick bli tre olika bind() funktioner.
En för som bläddrar framåt eller bakåt (paging), en för att rendera från början samt en för att rendera från givet index. Kanske inte sen "snyggaste" programmeringsmässigt eftersom jag vet att flera av er gärna skriver en enda funktion med flera inargument och kodar av inne i den men jag är typen som hellre har olika funktioner för att inte bränna prestanda och "smutsa" ner koden med för mycket avkodning.

Thx for all the help...

130 ms totalt · 3 externa anrop · v20260731065814-full.b746b907
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
128 ms — hämta tråd, inlägg och bilagor (db)