2011-04-26 105 views
-2

該網站是買/賣網站,代碼來自的頁面是「添加產品」頁面。會話意外消失

問題是,會話(「更改」)由於某種原因而變爲無效,我找不到任何錯誤。 payment.aspx有一個按鈕,通過會話(「更改」)將我發回頁面。 我看到問題的原因是,當我嘗試編輯某個類別時,該類別被重新調整爲列表中的第一個。當我調試我看到,本次會議是什麼,但它應該是

繼承人的代碼:

Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles BtnSubmit.Click 
     If Not stats > 0 Then 
      If Session("change") IsNot Nothing Then 
       Dim dc As New DataClassesDataContext 
       Dim getP = From prod In dc.Products _ 
          Where prod.ProductID = CInt(Session("change")) _ 
          Select prod 

       If getP.Any Then 
        If rdbSell.Checked = True Then 
         getP.FirstOrDefault.BuySell = True 
        Else 
         getP.FirstOrDefault.BuySell = False 
        End If 
        If ddlSubSubcat.SelectedValue IsNot String.Empty Then 
         getP.FirstOrDefault.CategoryID = CInt(ddlSubSubcat.SelectedValue) 
        Else 
         getP.FirstOrDefault.CategoryID = CInt(ddlSubCat.SelectedValue) 
        End If 

        getP.FirstOrDefault.Content = txtContent.Text.Replace(Environment.NewLine, "<br />") 
        getP.FirstOrDefault.CountyID = CInt(ddlCounty.SelectedValue) 
        getP.FirstOrDefault.E_mail = txtEmail.Text 
        getP.FirstOrDefault.Date = DateTime.Now 
        getP.FirstOrDefault.Active = 0 
        getP.FirstOrDefault.Alias = txtAlias.Text.Replace("'", "''") 
        getP.FirstOrDefault.ShowEmail = 0 
        Dim PreID As Integer = getP.FirstOrDefault.ProductID 
        If chkShowEmail.Checked = True Then 
         getP.FirstOrDefault.ShowEmail = 1 
        Else 
         getP.FirstOrDefault.ShowEmail = 0 
        End If 
        If chkShowPhone.Checked = True Then 
         getP.FirstOrDefault.ShowPhone = 1 
        Else 
         getP.FirstOrDefault.ShowPhone = 0 
        End If 
        getP.FirstOrDefault.Headline = txtHeadline.Text 
        getP.FirstOrDefault.Password = txtPassword.Text 
        getP.FirstOrDefault.Phone = txtPhone.Text 
        getP.FirstOrDefault.Price = txtPrice.Text 

        If chkUnknown.Checked = True Then 
         getP.FirstOrDefault.YearModel = String.Empty 
        Else 
         getP.FirstOrDefault.YearModel = ddlYear.SelectedValue 
        End If 

        For Each item In libPictures.Items 
         Dim i As String = item.ToString 
         Dim imagecheck = From img In dc.Pictures _ 
             Where img.Name = i And img.ProductID = CInt(Session("change")) _ 
             Select img 

         If imagecheck.Any Then 
         Else 
          Dim img As New Picture 
          img.Name = item.ToString 

          img.ProductID = CInt(Session("change")) 
          dc.Pictures.InsertOnSubmit(img) 
          dc.SubmitChanges() 
         End If 
        Next 

        dc.SubmitChanges() 

        Session.Remove("change") 
        Response.Redirect("~/precheck.aspx?id=" + PreID.ToString) 
       End If 
      Else 
       Dim dc As New DataClassesDataContext 
       Dim prod As New Product 
       If rdbSell.Checked = True Then 
        prod.BuySell = True 
       Else 
        prod.BuySell = False 
       End If 
       If ddlSubSubcat.DataValueField IsNot String.Empty Then 
        prod.CategoryID = CInt(ddlSubSubcat.SelectedValue) 
       Else 
        prod.CategoryID = CInt(ddlSubCat.SelectedValue) 
       End If 

       prod.Content = txtContent.Text.Replace(Environment.NewLine, "<br />") 
       prod.CountyID = CInt(ddlCounty.SelectedValue) 
       prod.E_mail = txtEmail.Text 
       prod.Date = DateTime.Now 
       prod.Active = 0 
       prod.Alias = txtAlias.Text.Replace("'", "''") 
       prod.ShowEmail = 0 
       If chkShowEmail.Checked = True Then 
        prod.ShowEmail = 1 
       Else 
        prod.ShowEmail = 0 
       End If 
       If chkShowPhone.Checked = True Then 
        prod.ShowPhone = 1 
       Else 
        prod.ShowPhone = 0 
       End If 
       prod.Headline = txtHeadline.Text 
       prod.Password = txtPassword.Text 
       prod.Phone = txtPhone.Text 
       prod.Price = txtPrice.Text 

       If chkUnknown.Checked = True Then 
        prod.YearModel = String.Empty 
       Else 
        prod.YearModel = ddlYear.SelectedValue 
       End If 

       dc.Products.InsertOnSubmit(prod) 
       dc.SubmitChanges() 
       Dim PreID As Integer = prod.ProductID 

       For Each item In libPictures.Items 
        Dim img As New Picture 
        img.Name = item.ToString 

        img.ProductID = prod.ProductID 
        dc.Pictures.InsertOnSubmit(img) 
        dc.SubmitChanges() 
       Next 
       Session.Remove("change") 
       Response.Redirect("./precheck.aspx?id=" + PreID.ToString, False) 
      End If 
     End If 
     stats = 0 
     'Catch ex As Exception 
     'End Try 

    End Sub 
+1

請不要在這裏發表您完整的代碼。嘗試構建一個簡短的,自包含的示例,演示您正在遇到的問題。 (詳見http://sscce.org) – Heinzi 2011-04-26 12:34:50

+0

好吧,那甚至不是代碼的1/6,我想我可以刪除一些部分...但科學我不知道我發佈的東西我覺得是問題重要。生病編輯它到一個較短的版本 – Jimmy 2011-04-26 12:36:25

+1

謝謝!不幸的是,我認爲你誤解了我:這不是關於刪除你認爲不相關的東西*。這是關於儘可能多地刪除*儘可能多的東西,而錯誤仍然發生*。因此,請嘗試刪除,例如,「prod.E_mail = txtEmail.Text」。錯誤是否仍然存在?是?然後繼續刪除東西。一旦你達到了一個狀態,沒有錯誤消失,沒有更多的線可以被刪除,請在這裏發佈代碼。 – Heinzi 2011-04-26 12:45:56

回答

1

這取決於應用程序是如何管理會話狀態。如果您的會話狀態被管理InProc,那麼如果應用程序池被回收,那麼您的所有會話信息都將丟失。如果發生這種情況,那麼在SQL Server中存儲會話狀態可能是一個不錯的選擇,它將在應用程序池回收之間持續存在。

更多信息:

ASP.NET Session State Overview

ASP.NET State Management Recommendations

+0

那麼,我還沒有指定任何東西,所以我想它的inproc ..但爲什麼服務器重置會話? – Jimmy 2011-04-27 10:00:35

+0

這是一個完整的其他問題,可能是由於一系列IIS配置/閾值問題。嘗試更改狀態管理方法並查看問題是否已解決。如果你想診斷回收,那麼你不得不挖掘更多的IIS配置選項。 – 2011-04-27 10:34:30

+0

愚蠢的我,忘了提,在視覺工作室運行這個。我的本地主機使用卡西尼。 – Jimmy 2011-04-27 11:02:03