01. februar 2006 - 23:09Der er
12 kommentarer og 2 løsninger
forhindre dobbelt-submit
I asp kan jeg godt forhindre at dobbelt-klik giver anledning til at der indsættes to rækker i databasen. Jeg bruger bare javascript til at disable submit-knappen før der submittes. Så forhindres definitivt at brugeren får noget ud af at trykke flere gange på knappen.
Men i .Net hvor jeg er begyndt at bruge post-back-faciliteten kan jeg ikke lave et clientside-onclick på min knap:
det man generelt goer er: * output tal til formen saa det submittes tilbage * gem tal i session * ved klik checker man om det indsendte tal matcher det i session, hvis ja inkrementerer man tallet i sessionen (kan genbruges) og udfoerer klik, hvis nej saa rejecter man
jeg ved ikke om ASP.NET har noget indbygget til dette
Man vil bruge enten noget i den stil eller noget javascript. du kan også gøre det på denne måde: <asp:Button ID="Action" OnLoad="btn_load" OnClick="Action_Click" runat="server" /> og i codebehind tilføjer du: protected void btn_load(object sender, EventArgs e) { //script som forhindre at bruger trykker mere end en gang Button btn = (Button)sender; System.Text.StringBuilder sb = new System.Text.StringBuilder(); sb.Append("if (typeof(Page_ClientValidate) == 'function') { "); sb.Append("if (Page_ClientValidate() == false) { return false; }} "); sb.Append("this.value = 'Vent venligst...';"); sb.Append("this.disabled = true;"); sb.Append(ClientScript.GetPostBackEventReference(btn, "")); sb.Append(";"); btn.Attributes.Add("onclick", sb.ToString()); }
arne_v: Din metode der bruger session er vel kun sikker hvis optælling af sessionen er udelelig ? hvis man er meget uheldig kan man vel tænke sig at to tråde begge aflæser sesssionen til din startværdi og derfor begge submitter ! Man kan selvfølgelig sætte application omkring optælling af sessionsvariablen, men det er jo lidt drastisk.
dr_chaos: (dit første eksempel) Kan man ikke risikere at den timeout der er i javascriptet ikke forhindre at man kan nå at klikke flere gange ?
dr_chaos: (dit andet eksempel) Kan du i ord forklare mig hvad der sker i din btn_load
i if (typeof(Page_ClientValidate) == 'function' Ser den på om der er validators på siden. I ("if (Page_ClientValidate() == false) { return false; }} "); stopper den ikke siden validerer korrekt. f.eks. i tilfælde af at et felt er tomt. I sb.Append("this.value = 'Vent venligst...';"); Sættes knappens tekst til Vent venligst i this.disabled = true;"); disables knappen I ClientScript.GetPostBackEventReference(btn, "") sikres det at postback med knappen udføres og at den korrekte funktion afvikles. Til sidste tilføjes det hele til knappen som et onclick event. Jeg bruger selv den sidste metode.
hvis du bruger asp.net 1.1 skal du muligvis ændre ClientScript.GetPostBackEventReference til Page.GetPostBackEventReference
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.