0

您好,我有一个会话 ID 变量,我从 Oracle 包传递到一个 asp 页面。我想要做的是保留该变量并通过不同的调用将其传递回 Oracle。我认为这应该很容易,但我失去了变量值。

解决方案中的其他所有内容都运行良好。这只是一个小小的补充。

我不太确定关于这个问题有多少信息太多或太少,但基本上我有一个连接类,它具有不同的方法来调用 Oracle 中的不同过程。通过按 asp 页面上的两个按钮之一来调用每个按钮。

一种方法(单击按钮)将传递会话 ID(连同存在于永久 Oracle 表中的游标结果)。

然后 asp 页面显示光标结果。

第二种方法(单击按钮)然后调用 Oracle 中的 proc 以根据会话 ID 将该表中存在的任何内容传递给另一个表。

为了确保传递正确的内容,我需要 asp 页面保留会话 ID(我到此为止),然后在另一个调用中将其传递回 Oracle。

在我们的声明中

private string outSessionID;

    public string OutSessionID
    {
        get { return outSessionID; }
        set { outSessionID = value; }
    }

设置参数的连接方法部分

addDbParameter(ref cmd, "outSession_ID", DbType.String, ParameterDirection.Output, null);

addDbParameter(ref cmd, "rc1", DbType.Object, ParameterDirection.Output, null);

 outSessionID = cmd.OutParameter<String>("outSession_ID");

在第二种方法中,我们有

addDbParameter(ref cmd, "inSession_ID", DbType.String, ParameterDirection.Input, OutSessionID);

我是 ASP 的新手,因此对丢失此信息的原因的任何见解表示赞赏。我认为这与回发是新会话或其他东西有关,但我不确定。

我很乐意用更多的代码进行推断,但不想提供任何不必要的东西。

谢谢。

只是为了补充一点,最后我添加了一个在 aspx.cs 中收集 sessionId 的小方法,然后在回发后调用该方法。尝试将 pre-init 中的值设置为 page_load 方法时发生了所有麻烦。通过在单击事件之后调用单独的方法,我能够成功保存和调用 sessionid。

感谢您的回复,他们非常有帮助。

4

1 回答 1

2

如果该信息不具有安全性,一种方法是您可以在您的 asp.net 页面上设置一个隐藏字段。注意:用户可以查看您页面的来源并查看隐藏字段的内容

<as:HiddenField runat="server" ID="MySessionID" />

然后在得到你的 sessionId 之后,你可以存储它

MySessionID.Value = outSessionID;

并在以后使用它

outSessionID = MySessionID.Value;

这是另一个技巧

public string OutSessionID
{
    get { return ViewState["outSessionID"].ToString(); }
    set { ViewState["outSessionID"] = value; }
}
于 2012-09-09T22:36:23.010 回答