Ich bin brandneu auf asp, also denke ich, dass die Antwort leicht sein sollte, aber ich kann nicht herausfinden, was ich falsch mache. Dies ist eine sehr einfache Warenkorb Übung, die ich mache, um ASP zu lernen. Ich erstelle die Sitzung, füge Dinge hinzu und kann dann auf der Checkout-Seite Artikel einzeln aus dem Warenkorb entfernen. Wenn ich auf Entfernen klicke, wird das Objekt aus der Listbox entfernt, aber nicht aus der Sitzung. Ich weiß, dass es in der Sitzung weiter besteht, denn wenn ich auf den Link zur Einkaufsseite klicke, wird das Listenfeld auf der Einkaufsseite mit dem Element gefüllt, von dem ich dachte, dass ich es entfernt habe.Entfernen eines Wörterbucheintrags aus einem Sitzungsindex (ASP)
Ich habe versucht, es auf zwei verschiedene Arten zu entfernen, und ich bin mir nicht sicher, warum es nicht funktioniert.
Hinweis: Die Wörterbuchschlüssel sind die tatsächlichen Namen der Produkte, die zum Füllen der Listenfelder verwendet werden. Der Werteintrag ist die productID #, die ich gerade nicht verwende. Das Listenfeld auf der Einkaufsseite wird mit Daten aus einer SQL-Quelle gefüllt. SelectedItem.Text = Produktname (was angezeigt wird) und SelectedValue = productID (nicht verwendet).
Vielen Dank für Ihre Hilfe
//Default (shopping) page
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
//Create a new collection for the session indexer
ArrayList cart = (ArrayList)Session["scart"];
//Need to initialize a new object in case it's null
if (cart == null)
{
cart = new ArrayList();
Session["scart"] = cart;
}
//Show the shopping car listbox if there are items in it and the
//user returned from the checkout page
else pnlItems.Visible = true;
foreach (DictionaryEntry item in cart)
{
lbItems.Items.Add((string)item.Key);
}
}
//Show the shipping cart listbox containing the items the user just added
if (IsPostBack) pnlItems.Visible = true;
}
private void add_to_cart(string item, int value)
{
//Method to add the selected item to the collection/session indexer
ArrayList cart = (ArrayList)Session["scart"];
cart.Add(new DictionaryEntry(item, value));
}
protected void btnAddItem_Click(object sender, EventArgs e)
{
//Method to send the selected item to the add_to_cart method
string item = ddlProducts.SelectedItem.Text;
lbItems.Items.Add(item);
int value = int.Parse(ddlProducts.SelectedValue);
add_to_cart(item, value);
}
protected void ddlProducts_SelectedIndexChanged(object sender, EventArgs e)
{
}
protected void btnCheckOut_Click(object sender, EventArgs e)
{
//Send the user to the checkout page when the button is clicked
Response.Redirect("checkout.aspx", true);
}
}
//CheckoutPage:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
//Populate the shopping cart on the checkout page with the items in the collection
ArrayList cart = (ArrayList)Session["scart"];
foreach (DictionaryEntry item in cart)
{
lbCheckOut.Items.Add((string)item.Key);
}
}
}
protected void btnKillOrder_Click(object sender, EventArgs e)
{
//Kills the order by ending the session, then returns the user to the shopping page.
Session.Clear();
Response.Redirect("Default.aspx", true);
}
protected void btnRemove_Click(object sender, EventArgs e)
{
//Removes the selected item from the shopping cart listbox and the session indexer
ArrayList cart = (ArrayList)Session["scart"];
cart.Remove(lbCheckOut.SelectedItem.Text);
lbCheckOut.Items.Remove(lbCheckOut.SelectedItem.Text);
Session["scart"] = cart;
//Session.Remove(lbCheckOut.SelectedItem.Text);
}
}
Vielen Dank, das hat funktioniert! Ich hatte etwas Ähnliches vorher versucht, aber einen Aufzählungsfehler in der foreach Aussage bekommen. Da ich nicht wusste, wie ich es richtig debuggen sollte, gab ich auf und probierte die oben beschriebene Methode aus. Trotzdem danke! –