单击Gridview更新按钮时会清除会话

时间:2012-08-14 08:59:22

标签: c# asp.net session gridview sqldatasource

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

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

在这个顺序页面中有一个gridview控件,其中包含以下sqldatasource,下面的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>

2 个答案:

答案 0 :(得分:1)

代码不会突然停止工作。必须有一些东西(即使它非常小)使它不再起作用。以下是您可以尝试找出问题所在的一些事项。

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

  2. 在整个解决方案中查找Session和Session [“File”]的所有内容,并通过应用程序在每次出现和调试时设置一个断点,以查看它在何处失去其价值。

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

答案 1 :(得分:0)

除了select参数之外,所有其他参数应该包括FileNo作为SessionParameter,Session [“FileNo”]没有被清除,它没有被使用。