2011-04-26 8 views
-2

사이트는 구매 또는 판매 사이트이며 코드가 제공되는 페이지는 "제품 추가"페이지입니다.예기치 않게 세션이 사라집니다.

문제는 세션 ("변경")이 아무런 이유가 없어서 오류를 찾을 수 없다는 것입니다. payment.aspx에는 세션이있는 페이지 ("변경")로 다시 보내는 버튼이 있습니다. 내가 문제를 보는 이유는 무언가를 편집하려고 할 때 범주가 목록의 첫 번째 항목으로 다시 설정되기 때문입니다. 내가 뭔가

을 Heres 코드해야하지만 내가 세션이 아무것도 볼 디버깅 할 때와 :

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

+0

글쎄, 1/6 코드도 아니고, 일부 부분을 삭제할 수있을 것 같아요.하지만 sience는 내가 알지 못하는 문제를 게시했습니다. 중대한. 아프다 짧은 버전으로 편집하십시오 – Jimmy

+1

고마워요! 불행히도, 나는 당신이 나를 오해 한 것 같아요. 당신이 * 생각하지 않는 것들을 제거하는 것이 아닙니다 *. 오류가 여전히 발생하는 동안 * 가능한 많은 것들을 제거하는 것입니다. 그래서, 예를 들어,'prod.E_mail = txtEmail.Text'을 제거해보십시오. 오류가 여전히 발생합니까? 예? 그런 다음 계속 물건을 제거하십시오. 오류가 사라지지 않고 더 이상 회선을 제거 할 수없는 상태에 이르면 여기에 코드를 게시하십시오. – Heinzi

답변

1

이 응용 프로그램 관리 세션 상태 방법에 따라 달라집니다. 세션 상태가 InProc으로 관리되는 경우 응용 프로그램 풀이 재활용되면 모든 세션 정보가 손실됩니다. 그런 다음 응용 프로그램 풀 재활용간에 유지됩니다 세션 상태를 SQL Server에 저장할 수있는 좋은 옵션이 될 수 있습니다.

상세 정보 :

ASP.NET Session State Overview

ASP.NET State Management Recommendations

+0

글쎄, 내가 아무것도 지정하지 havent 그 inproc .. 그래서 왜 서버가 세션을 재설정입니까? – Jimmy

+0

이것은 완전히 다른 질문이며 IIS 구성/임계 값 문제로 인해 발생할 수 있습니다. 상태 관리 방법을 변경하고 문제가 해결되었는지 확인하십시오. 재활용을 진단하려면 IIS 구성 옵션을 더 파헤쳐 야합니다. –

+0

내 바보 같은, Visual Studio에서 이것을 실행하는 것을 잊어 버렸습니다. 내 로컬 호스트는 cassini를 사용합니다. – Jimmy

관련 문제