Avatar billede ameq Nybegynder
11. april 2005 - 09:22 Der er 40 kommentarer og
1 løsning

Hjælp til at lave en postback funktion

Hej, jeg har lavet en side hvor jeg bruger Request.QueryString["alpha"] til styrrer et database udtræk, og nu ville jeg så gerne havde en dropdown box ind, det virker også fint fint min ind til jeg trykker på mit link som så sætter min alpha til noget nyt, for så laver den ikke PostBack og der for "resetter" den min dropdown box. Kan man lave på en eller anden må en funktion så jeg laver en postback.

Grunden til jeg bruger en Request.QueryString["alpha"] til at hold styr på min data er at jeg looper hele alfabet ud i en laben min et html link
Avatar billede burningice Nybegynder
11. april 2005 - 16:31 #1
du kan godt lave dit link til en postback-funktion (en linkbutton). Men som du selv er inde på, så virker postback kun så længe at adressen på siden ikke ændrer sig.
Avatar billede ameq Nybegynder
11. april 2005 - 18:18 #2
hvordan sætter jeg en værdig i linket
Avatar billede burningice Nybegynder
11. april 2005 - 18:40 #3
en værdi? det må du specificere lidt mere
Avatar billede burningice Nybegynder
11. april 2005 - 18:41 #4
<asp:LinkButton id="LinkButton1"
    Command="Command"
    CommandArgument="CommandArgument"
    OnClick="OnClickMethod"
    runat="server"/>
  Text
</asp:LinkButton>
Avatar billede ameq Nybegynder
11. april 2005 - 20:56 #5
også kan jeg hente CommandArgument ud?
og kan jeg få loopet det? jeg skal jo lave en for være bogstav i alfabet
Avatar billede burningice Nybegynder
11. april 2005 - 21:05 #6
du kan lave en for-løkke:

<asp:placeholder id="mineLinks" runat="server" />

char[] alfabet = //dit alfabet;

for (int i = 0; i < alfabet.Length; i++) {
  LinkButton link = new LinkButton;
  link.Text = alfabet[i].ToString();
  link.CommandArgument = alfabet[i].ToString();
  link.Click += new System.EventHandler(link_OnClick);

  mineLinks.Controls.Add(link);
}
Avatar billede ameq Nybegynder
12. april 2005 - 07:56 #7
en placeholder? hvordan virker det?
Avatar billede ameq Nybegynder
12. april 2005 - 08:09 #8
hvordan får jeg en string eller mit alfabet
for det her virker ikke rigtig char[] alfabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZÆØÅ";
Avatar billede burningice Nybegynder
12. april 2005 - 09:18 #9
char[] alfabet = new char[] {'A', 'B', 'C', 'D', 'E', osv... };

En placeholder er bare en control som du kan bruge til at smide noget i. Den renderer ikke nogen selv, så hvis den er tom når siden renderes kan man ikke se at den er der. Men meget god til ligesom at definere at "her skal der være nogen controller. Jeg ved ikke hvor mange, eller hvilke, men, her skal der bare være nogen".
Avatar billede ameq Nybegynder
12. april 2005 - 09:47 #10
okey, den skal jeg havde lidt mere hjælp til.
Når jeg udskriver linket knappen så stå de unden mellenrum, og det er lidt øv. En måde man kan indsætte et mellenrum unden at det blever en del af linket.

også har jeg lavet den her even
        private void link_OnClick(object sender, System.EventArgs e)
        {
            Response.Write("arg!");
        }

er det rigtig?
Avatar billede ameq Nybegynder
12. april 2005 - 13:23 #11
jeg har fået even til at virke, men hvordan boxer jeg den så jeg kan bruge det til noget?
Avatar billede burningice Nybegynder
12. april 2005 - 17:11 #12
for (int i = 0; i < alfabet.Length; i++) {
  LinkButton link = new LinkButton;
  link.Text = alfabet[i].ToString();
  link.CommandArgument = alfabet[i].ToString();
  link.Click += new System.EventHandler(link_OnClick);

  mineLinks.Controls.Add(link);
  mineLinks.Controls.Add(new LiteralControl(" "));
}

så skulle der gerne komme melemrum imellem dine links
Avatar billede burningice Nybegynder
12. april 2005 - 17:13 #13
dit event kunne så se sådan her ud:

private void link_OnClick(object sender, System.EventArgs e)
        {
            LinkButton link = (LinkButton)sender;
            string bogstav = link.CommandArgument;

            Response.Write("Du trykkede på "+ bogstav);
        }
Avatar billede ameq Nybegynder
12. april 2005 - 18:02 #14
okey, jeg tester lige imorgen
Avatar billede ameq Nybegynder
13. april 2005 - 08:14 #15
det virker vist nu, men jeg tænket på om det kan huske det på en eller anden måde (nej ikke en session) hvor hvad sker der hvis jeg bruger en pagging funktion på et datagrid, så vel den ikke huske hvilke bogstav jeg har trykket på eller hvad?
Avatar billede burningice Nybegynder
13. april 2005 - 08:54 #16
jo... du kan gemme det i viewstate
Avatar billede ameq Nybegynder
13. april 2005 - 10:15 #17
okey, har du et eks?
Avatar billede burningice Nybegynder
13. april 2005 - 10:21 #18
Gem:

Viewstate["Bogstav"] = "A";

Hent:

string bogstav = (string)Viewstate["Bogstav"];
Avatar billede ameq Nybegynder
13. april 2005 - 10:25 #19
okey? hvordan lige det? er det ligesom en session? eller hvad?
Avatar billede burningice Nybegynder
13. april 2005 - 10:48 #20
ikke helt... den gælder kun for den enkelte side, og indholdet af den bliver ikke gemt på serveren men bliver sendt med til klienten. Du er afhængig af den, og bruger den implicit hele tiden uden at vide det. Viewstate er det der gør at du kan bruge paging i et datagrid, at dine textboxe husker hvad der stod i dem mellem postbacks m.m.

Du kan gemme næsten hvad som helst i en viewstate, så længe objectet kan serialiseres. På klienten bliver viestate til noget i den her retning:

<input type="hidden" name="__VIEWSTATE" value="dDwtNzI5NjA2NTY4O3Q8O2w8aTwwPjs+O2w8dDw7bDxpPDE+O2k8Mz47aTw3PjtpPDk+Oz47bDx0PDtsPGk8MT47aTw1PjtpPDE1PjtpPDE3PjtpPDE5Pjs+O2w8dDw7bDxpPDA+Oz47bDx0PHA8cDxsPEhlaWdodDtXaWR0aDtfIVNCOz47bDwxPDcwcHg+OzE8NXB4PjtpPDM4ND47Pj47Pjs7Pjs+Pjt0PHA8bDxWaXNpYmxlOz47bDxvPGY+Oz4+Ozs+O3Q8O2w8aTwwPjs+O2w8dDxwPHA8bDxIZWlnaHQ7V2lkdGg7XyFTQjs+O2w8MTwwcHg+OzE8NXB4PjtpPDM4ND47Pj47Pjs7Pjs+Pjt0PDtsPGk8MD47PjtsPHQ8cDxwPGw8SGVpZ2h0O1dpZHRoO18hU0I7PjtsPDE8NHB4PjsxPDFweD47aTwzODQ+Oz4+Oz47Oz47Pj47dDw7bDxpPDA+Oz47bDx0PHA8cDxsPEhlaWdodDtXaWR0aDtfIVNCOz47bDwxPDVweD47MTwxcHg+O2k8Mzg0Pjs+Pjs+Ozs+Oz4+Oz4+O3Q8cDxsPFZpc2libGU7PjtsPG88dD47Pj47bDxpPDc+Oz47bDx0PDtsPGk8Mj47PjtsPHQ8cDxwPGw8TmF2aWdhdGVVcmw7PjtsPGh0dHA6Ly9nby5taWNyb3NvZnQuY29tLz9saW5raWQ9MjAzOTEzODs+Pjs+O2w8aTwwPjs+O2w8dDxwPHA8bDxJbWFnZVVybDtBbHRlcm5hdGVUZXh0Oz47bDxodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vc2VydmljZXByb3ZpZGVycy9kaXJlY3RvcnkvbG9nb3MvMTIwMC5naWY7IENyeXN0YWx0ZWNoIFdlYiBIb3N0aW5nIEluYzs+Pjs+Ozs+Oz4+Oz4+Oz4+O3Q8cDxsPFZpc2libGU7PjtsPG88dD47Pj47Oz47dDw7bDxpPDA+Oz47bDx0PHA8cDxsPEhlaWdodDtXaWR0aDtfIVNCOz47bDwxPDYwMHB4PjsxPDEwcHg+O2k8Mzg0Pjs+Pjs+Ozs+Oz4+Oz4+Oz4+Oz70NerYOmay0MK5wrhWjsxht6tdkg==" />
Avatar billede ameq Nybegynder
13. april 2005 - 11:49 #21
okey, hvornår skal jeg bruger den der "gemme" Viewstate["Bogstav"] = "A"; i postback? eller i even?
Avatar billede burningice Nybegynder
13. april 2005 - 11:53 #22
du skal gemme det i dit klik-event. på den måde kan du, når du pager dit datagrid hente dit bogstav ud igen af viewstaten.
Avatar billede ameq Nybegynder
13. april 2005 - 12:04 #23
så det når jeg klikker så kører den først min event også min pageload?
Avatar billede ameq Nybegynder
13. april 2005 - 12:07 #24
The name 'Viewstate' does not exist in the class or namespace ''

skal jeg enable det?
Avatar billede burningice Nybegynder
13. april 2005 - 12:16 #25
det er en property på Control-klassen så din Page skulle meget gerne have den:

this.ViewState["hej"] = "noget";
Avatar billede ameq Nybegynder
13. april 2005 - 12:21 #26
this.Viewstate["Bogstav"] = link.CommandArgument;

'Main.List' does not contain a definition for 'Viewstate'

det får jeg af fejl ende i min evenet
Avatar billede ameq Nybegynder
13. april 2005 - 12:29 #27
det skal bare det et stort S
Avatar billede ameq Nybegynder
13. april 2005 - 12:48 #28
men det virker føst hvis siden blever læse to gange
I min PageLoad

_bogstav = (string)this.ViewState["Bogstav"];



Men klik event
        private void link_OnClick(object sender, System.EventArgs e)
        {
            LinkButton link = (LinkButton)sender;
            this.ViewState["Bogstav"] = ((string)link.CommandArgument);
        }
Avatar billede ameq Nybegynder
13. april 2005 - 13:00 #29
nu forstå jeg ikke rigtig, nu får jeg den her fejl
Object reference not set to an instance of an object.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.NullReferenceException: Object reference not set to an instance of an object.

Source Error:

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below. 


i line 81, når jeg prøver at gå ind på siden.

Line 81
_bogstav = this.ViewState["Bogstav"].ToString();
Avatar billede ameq Nybegynder
13. april 2005 - 13:03 #30
og line 81 stå i min pageload unden at nolge if sætteringer
Avatar billede ameq Nybegynder
13. april 2005 - 13:06 #31
hvis jeg bruger den her, så laver den fejl når jeg trykker på mit link (laver postback)

if(IsPostBack)
{
  _bogstav = this.ViewState["Bogstav"].ToString();
}

er det ikke den rigtig måde at gøre det på?
Avatar billede ameq Nybegynder
13. april 2005 - 13:20 #32
ARRGGG!

Første gang jeg kommer ind på siden så stå der ikke noget i ViewState["Bogstav"] (det er okey)
Når jeg trykker på et link så stå der stadig væk ikke noget i ViewState["Bogstav"] (Ikke godt)
Hvis jeg så trykker en gang til så kommer det bogstav frem som jeg trykkede på første gang

Samtid kan jeg ikke bruger .Length på _bogstav, hvorfor?
Avatar billede burningice Nybegynder
13. april 2005 - 13:21 #33
lav en property til det, alt andet er noget ROD (!!)

string ValgtBogstav {
  get { if (ViewState["Bogstav"] == null) return "A";
        else return (string)ViewState["Bogstav"]; }

  set { ViewState["Bogstav"] = value; }
}
Avatar billede burningice Nybegynder
13. april 2005 - 13:24 #34
du skal huske på rækkefølgen af udførslen af dine events

1) PageLoad
2) link_OnClick

dvs. at når man trykker på et link, vil dette ikke kunne ses i PageLoad, da det først bliver registreret i click-eventet for dit link, som bliver udført EFTER din PageLoad
Avatar billede ameq Nybegynder
13. april 2005 - 13:30 #35
okey? men hvordan løser man det?
Avatar billede burningice Nybegynder
13. april 2005 - 13:38 #36
ved at omstrukturere din kode...

hvad gør at du har brug for at aflæse hvilket bogstav der er valgt i PageLoad?

normalt har man en DataBind-funktion der databinder sit grid ud fra en eller anden variabel, i dette tilfælde det valgte bogstav.

Denne databind-funktion skal så kaldes FØRSTE gang man kommer ind på siden (i PageLoad ved !IsPostback), og efterfølgende i dit link_Click event:

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

void link_Click(object sender, EventArgs e) {
    ValgtBogstav = ((LinkButton)sender).CommandArgument;
    BindGrid();
}

void BindGrid() {
    string bogstav = ValgtBogstav;

    ditGrid.DataSource = dbHandler.HentUdFraBogstav(bogstav);
    ditGrid.DataBind();
}
Avatar billede ameq Nybegynder
13. april 2005 - 13:42 #37
okey takker
Avatar billede burningice Nybegynder
13. april 2005 - 14:35 #38
nu ved jeg selvfølgelig ikke om det er det der er din problemstilling, det var bare et skud i tågen. Men det er ofte et af de problemer folk render ind i, når man begynder at rode med postback og viewstate, nemlig rækkefølgen på hvordan ens kode bliver udført.
Avatar billede ameq Nybegynder
13. april 2005 - 16:22 #39
ja, det var også mit problem.... jeg vil lige arbejde lidt mere med det imorgen
Avatar billede ameq Nybegynder
14. april 2005 - 12:20 #40
det virker nu, super! Tak for hjælpen, kommer du med et svar?
Avatar billede burningice Nybegynder
14. april 2005 - 13:12 #41
:)
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