Gå til innhold

Anbefalte innlegg

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
Videoannonse
Annonse

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 av mx1000
Lenke til kommentar
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

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

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 av GeirGrusom
Lenke til kommentar

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...