Avatar billede mema Nybegynder
31. oktober 2006 - 13:35 Der er 12 kommentarer og
1 løsning

Session state og ArrayList spørgsmål

Hej,
Jeg har en bestillingsprogram, hvor man kan vælge og bestille flere varer. Jeg har brugt Session for at gemme de valgte varer. Der er ikke brugt nogen database.
I Global.asax.cs har jeg skrevet:
protected void Session_Start(Object sender, EventArgs e)
{
Session["Cart"] = new ArrayList();
}
Så har jeg en oversigtside, hvor man kan se alle varer, som man har valgt. De vises på en Label vha. en ArrayList og foreach statement:

private void Page_Load(object sender, System.EventArgs e)
{
double totalCost = 0.00;
ArrayList cart = (ArrayList)Session["Cart"];
foreach (Bestilling item in cart)
{
totalCost += item.Pris;
lblOversigt.Text += "Vare: " + item.Vare + "<br/>" +
"Producent: " + item.Producent + "<br/>" +
....
....
"Pris: " + item.Pris.ToString("c") + "<br/><br/>";
}
lblTotal.Text = "Total pris: " + (totalCost + 260).ToString("c");
}

Så til sidst (når man er færdig med at vælge flere varer) klikker man på et kanp og kommer man til en ny side, hvor man skal indtaste sit navn, adresse osv. På denne side generere jeg først de bestilte varer i Page_Load vha. igen en ArrayList (Det ligner det samme som på oversigtssiden) på en Label (lblVis). Det er også OK indtil nu. Men så har jeg på denne side en metode (sendMail) som skal tager indholdet af "lblVis" og sætte den som body af e-mailen
...
...
myMail.Body = lblVis.Text;
...
...
Og så går det galt. Når jeg klikker på send knappen, som skal sende personlige infos plus indholdet af "lblVis" som indhold af e-mailen, bliver der alle bestillte varer vist 2 gange.

Jeg trot, at fejlen er, at når jeg klikker på send-knappen (eller måske når jeg loader denne side som skal sende e-mailen) bliver "lblVis" genereret og tilføjes til "lblVis" igen, men jeg ved ikke hvordan jeg kan løse dette problem.

Jeg håber meget, at jeg kan få hjælp her på eksperten...
Avatar billede mikkel_sommer Nybegynder
31. oktober 2006 - 13:45 #1
Prøv at sætte den del hvor du genererer teksten på din label i Page_Load ind i:

if(!isPostBack)
{
  //din kode...
}
Avatar billede mikkel_sommer Nybegynder
31. oktober 2006 - 13:46 #2
page_load bliver jo kørt igen når du klikker på knappen hvilket, med label.text +=, vil resultere i at teksten kommer på 2 gange
Avatar billede mema Nybegynder
31. oktober 2006 - 14:04 #3
Det var det. Tusind tak.
Send venligst et svar.
Avatar billede mikkel_sommer Nybegynder
31. oktober 2006 - 19:00 #4
Svar :)
Avatar billede mema Nybegynder
01. november 2006 - 00:12 #5
Hej igen og tak for sidst.
Jeg har nu et andet mærkelige problem. Nu sendes selve e-mailen 2 gange!

Metode som sender mail til vareleverandøren og til sig selv som Cc.:

public void btnSend_Click(object sender, System.EventArgs e)
{
Page.Validate();
if (Page.IsValid)
{
if (!(chkAccept.Checked))
{
lblAccept.Text = "Du skal acceptere betingelser!";
}
else
{
StringBuilder s = new StringBuilder();
s.AppendFormat("\n");                   
MailMessage myMail = new MailMessage();
myMail.From = txtFrom.Text;
myMail.To = "mema@leverandor.dk";
myMail.Cc = txtFrom.Text;
myMail.Subject = "Bestilling af Varer";
myMail.Body = "Tak for bestillingen. Der er nu sendt en e-mail til leverandøren vedr. din bestilling og du vil høre snart fra os."+ "\n" +
"Navn: " + txtNavn.Text + "\n" +
"Adresse: " + txtAdresse.Text + "\n" +
"Telefon: " + txtTlf.Text + "\n" +
"E-amil: " + txtFrom.Text + "\n\n" +
lblVis.Text + "\n\n" +
lblBeloeb.Text + "\n";
SmtpMail.Send(myMail);
lblAccept.Text = "";
chkAccept.Visible = false;
btnSend.Visible = false;
nulStil.Visible = false;
txtFrom.Enabled = false;
txtNavn.Enabled = false;
txtAdresse.Enabled = false;
txtTlf.Enabled = false;
lblBekraeftelse.Text ="Tak for bestillingen. Der er nu sendt en bekræftelse for modtagelse af din bestilling til denne e-mail adresse: " + txtFrom.Text;
}
}
}
Avatar billede mikkel_sommer Nybegynder
01. november 2006 - 09:42 #6
Det lyder lidt underligt prøv at lave en Find in files på SmtpMail.Send() og se om der er en logisk fejl med afsendelsen således at den forekommer to gange.
Avatar billede mema Nybegynder
01. november 2006 - 10:54 #7
Hej mikkel sommer,
Jeg har ikke konfigureret min localhost mailserveren. Dette program kopires og køres på Webserveren, og der er ikke nogen fejl.
Det eneste jeg tænker på, er, at her på min sendmail (btnSend_Click) metode findes en fjel. Men hvor?
Jeg har prøvet også og skrevet:
....
....
myMail.From = txtFrom.Text;
myMail.To = "mema@leverandor.dk" + ";" + txtFrom.Text;
//myMail.Cc = txtFrom.Text;
....
....
Men denne kode sender også mailen 2 gange.
Bliver glad at høre fra dig eller andre.
Avatar billede mikkel_sommer Nybegynder
01. november 2006 - 11:17 #8
Det burde ikke gøre nogen forskel men er txtFrom.Text = "mema@leverandor.dk"???
Avatar billede mema Nybegynder
01. november 2006 - 11:30 #9
Du må undskylde. Faktisk ser den nu sådan ud:
..
..
myMail.From = "noreply@leverandor.dk";
myMail.To = "mema@leverandor.dk" + ";" + txtTo.Text;
..

Koden for hele metoden ser nu sådan ud:
---
public void btnSend_Click(object sender, System.EventArgs e)
{
Page.Validate();
if (Page.IsValid)
{
if (!(chkAccept.Checked))
{
lblAccept.Text = "Du skal acceptere betingelser!";
}
else
{
StringBuilder s = new StringBuilder();
s.AppendFormat("\n");                   
MailMessage myMail = new MailMessage();
myMail.From = "noreply@leverandor.dk";
//myMail.From = txtFrom.Text;
myMail.To = "mem@leverandor.dk" + ";" + txtTo.Text;
//myMail.Cc = txtCc.Text;
//myMail.Cc = txtFrom.Text;
myMail.Subject = "Bestilling af varer";
myMail.Body = Tak for bestillingen. Der er nu sendt en e-mail til leverandøren vedr. din bestilling og du vil høre snart fra os."+ "\n" +
"Navn: " + txtNavn.Text + "\n" +
"Adresse: " + txtAdresse.Text + "\n" +
"Telefon: " + txtTlf.Text + "\n" +
"E-amil: " + txtFrom.Text + "\n\n" +
lblVis.Text + "\n\n" +
lblBeloeb.Text + "\n";
SmtpMail.Send(myMail);
lblAccept.Text = "";
chkAccept.Visible = false;
btnSend.Visible = false;
nulStil.Visible = false;
txtFrom.Enabled = false;
txtNavn.Enabled = false;
txtAdresse.Enabled = false;
txtTlf.Enabled = false;
lblBekraeftelse.Text ="Tak for bestillingen. Der er nu sendt en bekræftelse for modtagelse af din bestilling til denne e-mail adresse: " + txtTo.Text;
}
}
}
Avatar billede mema Nybegynder
01. november 2006 - 11:36 #10
Du spurgte om txtFrom.Text = "mema@leverandor.dk". Mail adressen mema@leverandor.dk er jo en fiktiv e-mail adresse, men i stedet for står der i den egentlige kode min egen e-mail adresse og den eksisterer. Hvis jeg har rigtigt forstået dit spørgsmål?
Avatar billede mikkel_sommer Nybegynder
01. november 2006 - 21:17 #11
Jeg tænkte bare på om den samme adresse kom til at stå to gange i "To" feltet...
Avatar billede mema Nybegynder
02. november 2006 - 15:13 #12
Nu har jeg løst problemet. Det var, at selve side med SendMail skulle ikke uploades igen. Tak for din hjælp igen.
Avatar billede mikkel_sommer Nybegynder
02. november 2006 - 21:04 #13
Det var bestemt så lidt, glæder mig at det virker :)
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