筆者最近在寫網站的購物車結帳流程,寫的時候為了方便消費者了解目前買了哪些產品,以及產品的單價與總金額,由於總金額 = 每個產品的數量 * 每個產品的單價,
筆者在購物清單中加了一個下拉式選單選擇數量,並從GridView中抓產品的單價,不過做的時候發現有個問題:
數量選擇9個時*產品單價200 = 總金額1800元,用來暫存總金額的Label的確是1800元,結帳時拿Label的1800存到資料表中的total,
結帳完畢後卻發現資料表中的total還是數量1*單價200 = 總金額200元!!!
怎麼會這樣呢? 筆者請教老師後才知道,原因是因為下拉式選單更新數量後頁面會重新載入,所以Label中的1800自然而然就歸零了!要先將總金額1800元存到暫存區內再轉送到資料表,而解決方法就是先將資料存到ViewState中,如此一來畫面即使重新整理後總金額並不會被歸零。
ViewState的用法如下:
存資料至State-
ViewState[0] = "123";
讀取ViewState[0]的資料放置 x-
string x = Convert.ToString(ViewState[0]);
當然,ViewState可以存放整數或其他的資料型別,也可以自訂索引的名稱。
如:
int i = 500;
ViewState["total"] = total;
int y = Convert.ToInt32(ViewState["total"].ToString());
or
int y = int.Parse(ViewState["total"].ToString());
但要注意的是,ViewState只會在該頁面中暫存,一旦離開後ViewState就會自動清除了。
沒有留言:
張貼留言