Avatar billede c-sharp Nybegynder
01. maj 2006 - 12:05 Der er 8 kommentarer og
1 løsning

Mangler hjælp til en tilbage knap

Jeg har på min side en liste over nogle produkter som bliver vist i en repeater, repeateren har jeg lavet noget sidestyring på så listen ikke bliver for lang. Når man trykker på et produkt vise en side som viser det valgte produkt.

Problemet er en tilbage knap jeg har på produktvisningen, denne skulle gerne linke tilbage til den side med produkter som brugeren kom fra. Det virker med lidt java-script så længe man ikke har skiftet side på produktvisningen (i repeateren), men har man skiftet side (eks. valgt side 2) og går ind på et produkt også vil tilbage igen, får man at vide at siden er forældet.

Hvordan udgår jeg det?
Avatar billede snepnet Nybegynder
01. maj 2006 - 15:47 #1
du kan steppe tilbage clientside afhængigt af hvor mange gange der er klikket på detaljesiden, eller du kan sikre dig at du kan åbne siden med oplysninger om hvad der skal vise.... det sidste kunne du f.eks. angive i din querystring.
mvh
Avatar billede snepnet Nybegynder
01. maj 2006 - 16:01 #2
lolz ... har en ClientSideBackButton her - hvis du har lyst til at lave det på den måde:

antallet af postbacks gemmes i controlstate - så løsningen forudsætter at du benytter 2.0.

hvis det ikke er tilfældet - må du gemme postbacks i viewstate eller lignende (et skjult felt på selve kontrollen f.eks.).

mvh

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

namespace SpecialControls
{
    public class ClientSideBackButton : Button
    {
        protected int PostBacks = 0;

        protected override void OnInit(EventArgs e)
        {
            Page.RegisterRequiresControlState(this);
            base.OnInit(e);
        }

        protected override void LoadControlState(object savedState)
        {
            object[] state = savedState as object[];
            base.LoadControlState(state[0]);
            PostBacks = (int)state[1];
        }

        protected override object SaveControlState()
        {
            object[] state = new object[2];
            state[0] = base.SaveControlState();
            state[1] = ++PostBacks;
            return state;
        }

        protected override void AddAttributesToRender(HtmlTextWriter writer)
        {
            writer.AddAttribute(HtmlTextWriterAttribute.Onclick, String.Format("history.go(-{0});return false;", PostBacks));
            base.AddAttributesToRender(writer);
        }
    }
}
Avatar billede c-sharp Nybegynder
01. maj 2006 - 20:08 #3
Hej Snepnet.

Tak for dine kommentare :-)

Hvis jeg vil lave den knap hvor i projektet laver jeg så den. Har ikke prøvet at override asp.net's controls før :-)
Avatar billede snepnet Nybegynder
01. maj 2006 - 20:28 #4
ahh... jamen så er det jo bare at komme igang ;o)
du kan bare lægge ovenstående i en cs-fil i App_Code folderen, hvis den ikke findes kan du bare højreklikke på dit projekt, og trykke "add new item".
i boksen der kommer frem vælger du så class som typen.
så paster du bare koden ind i filen.
du kan så bruge den på en siden sådan her:

<%@ Register Namespace="SpecialControls" TagPrefix="ccc" %>

og så bare indsætte den på normal vis med det tagprefix du har givet:
<ccc:ClientSideBackButton ID="btn" runat="server" />

ellers kan du self. bare indsætte den programmatisk:
ClientSideBackButton btn = new ClientSideBackButton();
form1.Controls.Add(btn);

igen er ovenstående baseret på at du benytter 2.0

mvh
Avatar billede c-sharp Nybegynder
01. maj 2006 - 21:29 #5
Super hjælp :-)

Jeg har lige et problem med den her linie:

base.OnInit(e);

Hvad er "e"?
Avatar billede snepnet Nybegynder
01. maj 2006 - 21:35 #6
bare argumentet metoden kaldes med:
protected override void OnInit(EventArgs e)
{
  Page.RegisterRequiresControlState(this);
  base.OnInit(e);
}
mvh
Avatar billede snepnet Nybegynder
01. maj 2006 - 21:35 #7
ryger bare med til basens implementering...
mvh
Avatar billede c-sharp Nybegynder
03. maj 2006 - 17:42 #8
Den bedste løsning jeg kunne finde på er at lave min side styring af min repeater vedhjælp af URL's. Så jeg laver et postback for hvert sideskift og derved får en quesrystring med i min url.

snepnet tak for din hjælp, smid et svar så får du point!
Avatar billede snepnet Nybegynder
03. maj 2006 - 17:48 #9
kommer her :o)
mvh
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