Bruno Mars Skrevet 27. april 2009 Del Skrevet 27. april 2009 Poenget er å lagre hvor mange ganger man har trykket på en knapp i en cookie. Startet slik, men det er noe som ikke funker: using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; public partial class _Default : System.Web.UI.Page { int antall = 0; private void LagVelkomstHilsen(string navn) { labHilsen.Text = "Du har beøkt siden " + navn + " ganger den siste timen."; } protected void Page_Load(object sender, EventArgs e) { HttpCookie navnCookie = Request.Cookies["navn"]; string navn = "0"; if (navnCookie != null) { navn = navnCookie.Value; } LagVelkomstHilsen(navn); } protected void btnSettNavn_Click(object sender, EventArgs e) { HttpCookie cookie = new HttpCookie("navn", Convert.ToString(antall++)); cookie.Expires = DateTime.Now + (new TimeSpan(0,1,0,0)); Response.Cookies.Add(cookie); LagVelkomstHilsen(Convert.ToString(antall)); } } Lenke til kommentar
GeirGrusom Skrevet 28. april 2009 Del Skrevet 28. april 2009 (endret) Jeg kan ikke se at du setter antallet noen steder, og antall vil da følgelig alltid være 0. Og hvilke bøker er det du leser som sier at en skal bruke Convert klassen såpass hyppig? Endret 28. april 2009 av GeirGrusom Lenke til kommentar
Bruno Mars Skrevet 28. april 2009 Forfatter Del Skrevet 28. april 2009 (endret) Det ligger jo en antall++ i btnSettNavn_Click... Men den ligger kanskje på feil sted? Slik det er nå så starter den på 0. På et klikk blir den 1, men der stopper det. Bruker boken Programmering av dynamiske websider i C#. Vet ikke om det er den eller min feil om det blit blir mye (unødvendige) koverteringer. Endret 28. april 2009 av mx1000 Lenke til kommentar
GeirGrusom Skrevet 28. april 2009 Del Skrevet 28. april 2009 Det ligger jo en antall++ i btnSettNavn_Click... Men den ligger kanskje på feil sted? Slik det er nå så starter den på 0. På et klikk blir den 1, men der stopper det. Bruker boken Programmering av dynamiske websider i C#. Vet ikke om det er den eller min feil om det blit blir mye (unødvendige) koverteringer. Problemet er at du først må hente ut verdien fra cookien, for så å telle opp 1, ellers vil du alltid bare få 1 (siden antall++ er som regel lik 1 avhangig av sammenhengen) Når det gjelder Convert klassen, er den ikke direkte feil å bruke, men den har store svakheter ytelsesmessig. Grunnen er at normal casting (int)3.14 for eksempel, kan optimaliseres av compileren. Convert.ToInt(3.14) vil ikke kunne optimaliseres (siden koden allerede er generert) Derfor brukes casting når en konverterer mellom primitive datatyper (byte, short, int, long, double, float og decimal) mens Convert kan brukes fra for eksempel string til int (selv om jeg vil anbefale å bruke de forskjellige datatypene sine Parse metoder) eller fra database-records. Bruk operator as på referansetyper (klasser og interfaces), casting på primitiver, Parse fra string til primitiv, og .ToString() fra primitiv til string. For eksempel: var obj = my_object as IDisposable; //Cast referanse til IDisposable var my_int = int.Parse("52"); var my_int_from_double = (int)3.14; var my_string = my_int.ToString(); I tilfellet Parse() spiller det forsåvidt liten rolle om du bruker Convert klassen, siden du vil få samme overhead uansett hvilken du bruker, så der er det bare snakk om smak og behag. Lenke til kommentar
Bruno Mars Skrevet 28. april 2009 Forfatter Del Skrevet 28. april 2009 Ok jeg skjønner feilen. Men jeg skjønner ikke helt hvordan jeg skal få lagret verdien i cookien... :| Det den gjør nå er at den begynner på 0 hver gang og legger til 1. Kan så lite om cookies og skjønner ikke hvordan jeg skal få til dette. Greier å gjøre samme oppgave i sesjonsvariebel, men ikke i cookies, enda. Koden nå: using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; public partial class _Default : System.Web.UI.Page { private void LagVelkomstHilsen(int navn) { labBesok.Text = "Du har beøkt siden " + navn + " ganger den siste timen."; } protected void Page_Load(object sender, EventArgs e) { HttpCookie navnCookie = Request.Cookies["navn"]; int navn = 0; if (navnCookie != null) { navn = Convert.ToInt16(navnCookie.Value); } LagVelkomstHilsen(navn); } protected void btnOppdater_Click(object sender, EventArgs e) { HttpCookie cookie = new HttpCookie("navn", "0"); int cake = Convert.ToInt16(cookie.Value) + 1; cookie.Expires = DateTime.Now + (new TimeSpan(0, 1, 0, 0)); Response.Cookies.Add(cookie); LagVelkomstHilsen(cake); } } Lenke til kommentar
GeirGrusom Skrevet 29. april 2009 Del Skrevet 29. april 2009 (endret) Nå har ikke jeg rørt cookies i .NET, men jeg tenker du må gjøre noe slikt: public void Page_Load(object sender, EventArgs e) { if(Request.Cookies.Contains("antall")) // Lagre antallet fra klienten i vår midlertidige variabel // Dette fører til at cookien vil bli satt til forrige verdi int.TryParse(Request.Cookiess["antall"].Value, out antall); } Endret 29. april 2009 av GeirGrusom Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå