2011-04-26 74 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