【问题标题】:Session is cleared when Gridview Update Button is clicked单击 Gridview 更新按钮时清除会话
【发布时间】:2012-08-14 08:59:21
【问题描述】:

我有一个页面 (Order.aspx),其中显示了一个具有特定 FileNo 的订单,下面我从我的 (Default.aspx) 调用此页面:

    LinkButton clickedButton = (LinkButton)sender;
    Session["FileNo"] = clickedButton.Text;
    Response.Redirect("~/Order.aspx");

在这个订单页面中有一个带有以下sqldatasource的gridview控件,下面的Datasource成功地工作并更新了数据库,但突然它开始用null FileNo更新数据库。我不明白我的Session["FileNo"] 什么时候被清除。我可以提供任何要求的额外代码。

<asp:SqlDataSource ID="sds_OrderDetail" OnSelected="sds_OrderDetail_Selected" runat="server"
    ConnectionString="<%$ ConnectionStrings:MyDbConn %>" DeleteCommand="DELETE FROM [OrderDetail] WHERE [RowNo] = @RowNo"
    InsertCommand="INSERT INTO [OrderDetail] ([FileNo], [PONumber], [MaterialCode], [MaterialDescription], [MaterialCategory], [UnitOfMeasure], [Quantity], [ContainerType], [LoadingDate]) VALUES (@FileNo, @PONumber, @MaterialCode, @MaterialDescription, @MaterialCategory, @UnitOfMeasure, @Quantity, @ContainerType, @LoadingDate)"
    SelectCommand="SELECT * FROM [OrderDetail] WHERE ([FileNo] = @FileNo)" UpdateCommand="UPDATE [OrderDetail] SET [FileNo] = @FileNo, [PONumber] = @PONumber, [MaterialCode] = @MaterialCode, [MaterialDescription] = @MaterialDescription, [MaterialCategory] = @MaterialCategory, [UnitOfMeasure] = @UnitOfMeasure, [Quantity] = @Quantity, [ContainerType] = @ContainerType, [LoadingDate] = @LoadingDate WHERE [RowNo] = @RowNo">
    <SelectParameters>
        <asp:SessionParameter DefaultValue="-1" Name="FileNo" SessionField="FileNo" Type="Int32" />
    </SelectParameters>
    <DeleteParameters>
        <asp:Parameter Name="RowNo" Type="Int32" />
    </DeleteParameters>
    <InsertParameters>
        <asp:Parameter Name="FileNo" Type="Int32" />
        <asp:Parameter Name="PONumber" Type="String" />
        <asp:Parameter Name="MaterialCode" Type="String" />
        <asp:Parameter Name="MaterialDescription" Type="String" />
        <asp:Parameter Name="MaterialCategory" Type="String" />
        <asp:Parameter Name="UnitOfMeasure" Type="String" />
        <asp:Parameter Name="Quantity" Type="Int32" />
        <asp:Parameter Name="ContainerType" Type="String" />
        <asp:Parameter Name="LoadingDate" Type="String" />
    </InsertParameters>
    <UpdateParameters>
        <asp:Parameter Name="FileNo" Type="Int32" />
        <asp:Parameter Name="PONumber" Type="String" />
        <asp:Parameter Name="MaterialCode" Type="String" />
        <asp:Parameter Name="MaterialDescription" Type="String" />
        <asp:Parameter Name="MaterialCategory" Type="String" />
        <asp:Parameter Name="UnitOfMeasure" Type="String" />
        <asp:Parameter Name="Quantity" Type="Int32" />
        <asp:Parameter Name="ContainerType" Type="String" />
        <asp:Parameter Name="LoadingDate" Type="String" />
        <asp:Parameter Name="RowNo" Type="Int32" />
    </UpdateParameters>
</asp:SqlDataSource>

【问题讨论】:

    标签: c# asp.net session gridview sqldatasource


    【解决方案1】:

    代码不会突然停止工作。一定有什么东西(即使它很小)使它不再工作。以下是您可以尝试找出问题所在的几件事。

    1. 尝试注释掉自上次工作以来更改的内容,并开始以最少的更改取消注释代码。

    2. 在整个解决方案中查找所有出现的 Session 和 Session["File"] 并在每次出现时设置一个断点,并通过您的应用程序进行调试,以查看它失去价值的确切位置。

    3. 如果您不希望 FileNo 为空,请更改 SQL 中的表结构,并且不允许其中包含空值。它增加了额外的验证层,并确保没有损坏的数据进入数据库。归根结底,这关乎数据是否有效。

    【讨论】:

    • 是的,这与我所做的事情的顺序非常相似,加上 stackoverflow 中的第四次询问
    • 您可以尝试调试另一件事。尝试写入一个全新的会话变量。将其称为 FileNoTest 并查看它是否保留该值。这将使您更好地指示问题是由于某种原因正在刷新整个会话还是只是 FileNo 正在刷新。
    【解决方案2】:

    除了选择参数外,其他所有参数都应该包括FileNo作为SessionParameter,Session["FileNo"]没有被清除,没有被使用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-05
      • 1970-01-01
      • 1970-01-01
      • 2017-09-21
      • 2019-12-17
      • 1970-01-01
      相关资源
      最近更新 更多