Опитвам се да настроя електронен магазин. До всеки елемент имам asp:imagebutton
, когато се щракне върху този бутон за изображение, проверявам дали променливата на сесията session["basket"]
съществува или не, ако не, тогава добавям стойностите в списък (клас на обект) и добавям този списък в сесията.
ако сесията не е празна, тогава извличам стойностите от сесията в списъка и променям списъка и след това добавям списъка обратно към сесията.
Проблем:
По някаква причина внезапно губя променливата на сесията. Проверих часовника си (времето) и е непредсказуемо, понякога отнема по-малко от 1 минута, понякога 3 минути, понякога 5 минути и т.н.
защо губя променливата на сесията?
Потърсих в Google и открих - може да се случи, ако използвате Response.Redirect
- без фалшив параметър или ако сте в UpdatePanel
и т.н.
За момента губя променливата на същата страница.
Цялата идея е поставена в променлива на сесията и извършване на проверка и извличане на променливата на сесията във втората aspx
страница... но това не винаги работи, защото в повечето случаи променливите на сесията стават празни. И понякога работи.
може ли някой да посъветва? какво и къде трябва да проверя? В някои страници на уебсайтове (google) съветват да се използва кеширане, но кеширането е базирано на приложение, така че всеки ще извлече една и съща стойност.
В моята страница всеки потребител (удостоверен или анономен потребител), с други думи всеки потребител без вход трябва да може да поръчва (ще изпратя фактура за предварително плащане)....
Не използвам уеб ферма, нито уеб градина... Току-що проверих IIS - уебсайт - състояние на сесията - В процес е, настройки на бисквитките = използване на бисквитки, име = asp.net_sessionid, изчакване = 20....
Моля, посъветвайте?
It's C#
, ASPX 3.5
, IIS7.5
НЯМАМ PAGE_LOAD в моята ASPX страница.
// единственото място, където поставям sessoin=null, е бутон за връзка, за останалото не поставям null в session["basket"]....
protected void lnkDeleteAllSelected_Click(object sender, EventArgs e)
{
Session["Basket"] = null;
ReloadBasketItems();
}
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
//System.Diagnostics.Debugger.Break();
lvJuridisch.ItemDataBound += new EventHandler<ListViewItemEventArgs>(this.lv_ItemDataBound);
lvJuridisch.DataBound += new EventHandler(lv_DataBound);
}
imgButtonAddtoBasket -> се дефинира като asp:imagebutton в asp:listview
protected void imgButtonAddtoBasket_Click(object sender, ImageClickEventArgs e)
{
ListViewDataItem lvi = ((sender as ImageButton).NamingContainer) as ListViewDataItem;
DataKey currentDataKey = (lvi.NamingContainer as ListView).DataKeys[lvi.DataItemIndex];
WebShopInfo SingleItem = new WebShopInfo();
SingleItem.cd_type_pub = currentDataKey[0].ToString();
SingleItem.no_pub = currentDataKey[1].ToString();
SingleItem.no_suite_pub = Convert.ToInt32(currentDataKey[2]);
SingleItem.cd_langue = Convert.ToChar(currentDataKey[3]);
SingleItem.lb_titre_red = (lvi.FindControl("HiddenfieldProductRed") as HiddenField).Value;
SingleItem.m_price = Convert.ToDecimal((lvi.FindControl("hiddenField_M_Price") as HiddenField).Value);
SingleItem.nm_price = Convert.ToDecimal((lvi.FindControl("hiddenField_NM_Price") as HiddenField).Value);
SingleItem.mt_pourc_tva = Convert.ToDecimal((lvi.FindControl("hfBTW") as HiddenField).Value);
List<WebShopInfo> lws = new List<WebShopInfo>();
if (Session["Basket"] == null)
{
//Session is empty so add listview to the session....
//Session.Timeout = 20; -- I tried this but this is not working too...
lws.Add(SingleItem);
Session["Basket"] = lws;
}
else
{
//Session is not empty so get asp:listview from the session.
lws = Session["Basket"] as List<WebShopInfo>;
WebShopInfo wsi = lws.Where(a => a.cd_type_pub == SingleItem.cd_type_pub &&
a.no_pub == SingleItem.no_pub &&
a.no_suite_pub == SingleItem.no_suite_pub &&
a.cd_langue == SingleItem.cd_langue).SingleOrDefault<WebShopInfo>();
if (wsi != null)
lws.Remove(wsi);
if (SingleItem.Count > 0)
lws.Add(SingleItem);
Session["Basket"] = lws;
}
ReloadBasketItems();
}
Session["basket"] = null
в секцията page_load? - person V4Vendetta   schedule 25.07.2011