22. december 2006 - 11:03
Der er
6 kommentarer og
1 løsning
Session state og dropdown list problem
Hej
Jeg har et problem med en dropdown-list control i en asp.net webform i asp.net 1.1.
Jeg bruge Session og ArrayList for at gemme vaglte items af en "Shopping cart lignende program - uden database" i session og efter udføring af nogle beregninger for prisen vises der en liste af de valgte items plus prisen.
Problemet er, at i min først dropdown-list har jeg 6 item, hvor hver har sin egen "Text" og "Value". Value af den 6. item ligner value af den første - og selv om Teksten er forskellige, når jeg vil prøve at vise teksten af den 6. item i oversigtssiden, vises der teksten af den første item.
Ret mærkelige problem for mig som begynder. Jeg glæder mig meget at få hjælp. God Jul.
22. december 2006 - 21:58
#3
Jeg kan desværre ikke ændre på deres value. De er forskellige produkter og tilfældigvis er det tal for 2 items i denne dropdown-liste er de samme.
Her kommer koderne:
Global.asax.cs:
--------------
...
protected void Session_Start(Object sender, EventArgs e) {
Session["Cart"] = new ArrayList();
}
...
---------------------------
Bestilling.cs:
--------------
using System;
using ...
namespace Salg
{
public class Bestilling {
protected System.Web.UI.WebControls.TextBox txtStorrelse;
protected System.Web.UI.WebControls.TextBox txtAntal;
protected System.Web.UI.WebControls.DropDownList listProdukt;
private double _grundpris;
private double _storrelse;
private double _antal;
private double _pris;
private string _produktString;
public Bestilling(double grundpris, double storrelse, double antal, double produkt, double pris, string produktString) {
_grundpris = grundpris;
_storrelse = storrelse;
_antal = antal;
_produkt = produkt;
_pris = pris;
_produktString = produktString;
}
public double Grundpris {
get { return _grundpris; }
set { _grundpris = value; }
}
public double Storrelse {
get { return _storrelse; }
set { _storrelse = value; }
}
public double Antal {
get { return _antal; }
set { _antal = value; }
}
public double Produkt {
get { return _produkt; }
set { _produkt = value; }
}
public double Pris {
get { return _pris; }
set { _pris = value; }
}
public string ProduktString {
get { return _produktString; }
set { _produktString = value; }
}
}
}
---------------------------------
bestil.aspx.cs:
-----------------
using System;
using...
namespace Salg
{
public class bestil : System.Web.UI.Page {
protected System.Web.UI.WebControls.TextBox txtStorrelse;
protected System.Web.UI.WebControls.TextBox txtAntal;
protected System.Web.UI.WebControls.DropDownList listProdukt;
protected System.Web.UI.WebControls.Button btnFortsaet;
private double _grundpris;
private double _storrelse;
private double _antal;
private double _Produkt;
private double _pris;
private string _produktString;
private void Page_Load(object sender, System.EventArgs e) {
Response.CacheControl = "no-cache";
}
public double Storrelse
{
get {
_storrelse = Double.Parse(txtStorrelse.Text);
return _storrelse;
}
set { _storrelse = value; }
}
public double Grundpris
{
get {
_grundpris = Antal * Storrelse * 0.0026;
return _grundpris;
}
set { _grundpris = value; }
}
public double Produkt
{
get {
_produkt = Grundpris - (Grundpris * Double.Parse(listProdukt.SelectedItem.Value));
return _produkt;
}
set { _produkt = value; }
}
public double Antal
{
get {
_antal = Double.Parse(txtAntal.Text);
return _antal;
}
set { _antal = value; }
}
public double Pris
{
get {
if (Antal < 20000)
_pris = Produkt * (2000/(2000 + Double.Parse(txtAntal.Text))) ;
else
_pris = Produkt * ((0.05) + (8200 / (8200 + Double.Parse(txtAntal.Text))));
return _pris;
}
set { _pris = value; }
}
public string ProduktString {
get{
_produktString = listProdukt.SelectedItem.Text;
return _produktString;
}
set { _produktString = value; }
}
private void AddItem(double grundpris, double storrelse, double antal, double produkt, double pris, string produktString)
{
ArrayList cart = (ArrayList)Session["Cart"];
cart.Add(new Bestilling(Grundpris, Storrelse, Antal, Produkt, Pris, ProduktString));
}
#region Web Form Designer generated code
...
...
}
#endregion
private void btnFortsaet_Click(object sender, System.EventArgs e) {
AddItem(Grundpris, Storrelse, Antal, Produkt, Pris, ProduktString);
Response.Redirect("Bestillingsoversigt.aspx");
}
}
}
----------------------------------
Bestillingsoversigt.aspx.cs:
---------------------------
using System;
using....
namespace Salg
{
public class Bestillingsoversigt : System.Web.UI.Page {
protected System.Web.UI.WebControls.Label lblOversigt;
protected System.Web.UI.WebControls.Label lblTotal;
protected System.Web.UI.WebControls.Button btnSlet;
protected System.Web.UI.WebControls.Button btnFlere;
private void Page_Load(object sender, System.EventArgs e) {
Response.CacheControl = "no-cache";
double totalCost = 0.00;
ArrayList cart = (ArrayList)Session["Cart"];
foreach (Bestilling item in cart)
{
totalCost += item.Pris;
lblOversigt.Text += "Produkt: " + item.ProduktString + "<br/>" +
"Størrelse i CM2: " + item.Storrelse + "<br/>" +
"Antal: " + item.Antal + "<br/>" +
"Pris: " + item.Pris.ToString("c") + "<br/><br/>";
}
lblTotal.Text = "Total pris: " + (totalCost + 260).ToString("c"); }
#region Web Form Designer generated code
...
...
}
#endregion
private void btnFlere_Click(object sender, System.EventArgs e) {
Response.Redirect("bestil.aspx");
}
private void btnSlet_Click(object sender, System.EventArgs e) {
//sletter alle gemte session-data
Session.Abandon();
Response.Redirect("bestil.aspx");
}
}
}
-------------------------------------------------
Og den dropdown-liste, som giver mig hovedpine:
----------------------
<asp:dropdownlist id="listProdukt" runat="server" Width="200px">
<asp:ListItem Value="-- Vælg --" Selected="True">-- Vælg --</asp:ListItem>
<asp:ListItem Value="0,005">Produkt 1</asp:ListItem>
<asp:ListItem Value="0,00">Produkt 2</asp:ListItem>
<asp:ListItem Value="0,0025">Produkt 3</asp:ListItem>
<asp:ListItem Value="0,01">Produkt 4</asp:ListItem>
<asp:ListItem Value="0,0005">Produkt 5</asp:ListItem>
<asp:ListItem Value="0,005">Produkt 6</asp:ListItem>
</asp:dropdownlist>
23. december 2006 - 19:49
#4
du må lige uddybe hvorfor du ikke kan ændre på value i disse to... du taler en anelse for indforstået=)
<asp:ListItem Value="0,005">Produkt 1</asp:ListItem>
<asp:ListItem Value="0,005">Produkt 6</asp:ListItem>
23. december 2006 - 23:06
#5
Det er fordi disse values går i en beregning, som er basis for prisbergening, og jeg ken ikke bare ændre på dem.
....
public double Produkt
{
get {
_produkt = Grundpris - (Grundpris * Double.Parse(listProdukt.SelectedItem.Value));
return _produkt;
}
....
....
24. december 2006 - 12:41
#6
Hej
Jeg kunne ikke løse problemet programmatisk. Men jeg har nu løst mit problem ved at ændre på value af 6. item ved at sætte det til: 0,005000000009 i stedet for 0,005, så dets value er anderledes end 1. item og jeg kan godt se teksten "Produkt 6" i oversigtssiden. Strange!