-1
if (!IsPostBack)
{
        try
        {
            Label1.Text = Session["user.transaction.id"].ToString(); //Error Line
        }
        catch (Exception a8)
        {
            Label1.Text = a8.Message;
        }
 }

我用来将信息存储到 Session 中的代码

尝试 {

        _conn = new OdbcConnection(DatabaseManager.getConnectionString());
        if (_conn.State == ConnectionState.Closed)
            _conn.Open();
        OdbcCommand cmd = _conn.CreateCommand();
        cmd.CommandText = "{call vam_gen_new_card3(?,?,?,?,?,?,?,?,?,?,?)}";
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.Parameters.Add("@personal_card", OdbcType.Char, 1).Value = 'Y';
        cmd.Parameters.Add("@holder_surname", OdbcType.VarChar, 50).Value = tbSurname.Text.ToString();
        cmd.Parameters.Add("@holder_name", OdbcType.VarChar, 100).Value = tbName.Text.ToString();
        cmd.Parameters.Add("@holder_cname", OdbcType.Char, 10).Value = tbCname.Text.ToString();
        cmd.Parameters.Add("@date_of_birth", OdbcType.VarChar, 11).Value = tbDOB.Text.ToString();
        cmd.Parameters.Add("@travel_document_no", OdbcType.VarChar, 20).Value = tbTravelDocNo.Text.ToString();
        cmd.Parameters.Add("@nationality", OdbcType.VarChar, 40).Value = tbNationality.Text.ToString();
        cmd.Parameters.Add("@email", OdbcType.VarChar, 50).Value = tbEmail.Text.ToString();
        cmd.Parameters.Add("@telephone", OdbcType.VarChar, 20).Value = tbTelephone.Text.ToString();
        cmd.Parameters.Add("@mobilephone", OdbcType.VarChar, 20).Value = tbMobile.Text.ToString();
        cmd.Parameters.Add("@card_remark", OdbcType.VarChar, 255).Value = card_remark;
        OdbcDataReader rs = cmd.ExecuteReader();

        while (rs.Read())
        {
            Session["user.transaction.id"] = "SVC0" + rs["card_no"].ToString();   //get the transaction no.
            Session["user.total_amount"] = Convert.ToDecimal(tbAmount.Text);
        }

我最初在Session["user.transaction.id]. 但是当我将信息发布到支付网关并回发时。我无法找回Session["user.transaction.id"]并得到错误。我想知道如何解决这个问题。

4

3 回答 3

1

NullReferenceExceptions 比他们应该的要普遍得多。

你不能ToString()什么都不叫。您应该进行检查,例如:

if (Session["user.transaction.id"] != null) {
    Session["user.transaction.id"].ToString();
}

这是你应该习惯记住的事情,并且学会不要假设任何事情都会成为事情。看看Label.Textand :在这些情况下, and是a8.Message更清晰和“安全”的东西,但是每次你访问引用类型的成员时,你应该知道你的变量引用了一个实例。因此,这些异常很容易追踪。Labela8

如果您在将用户发送到某个地方然后让他们返回的过程中遇到此问题,那么用户离开的时间很可能比分配的会话超时时间更长,因此在他们返回时开始一个新会话。

于 2013-01-18T09:55:38.387 回答
1

创建会话变量的正确方法是:

Session["VarName"] = value;

从会话中读取项目:

Label1.Text = Session["VarName"].ToString();

或者您可以使用 Add 方法:

Session.Add("VarName", value);

无论哪种方式都会奏效。

接下来从会话状态中删除项目:

Session.Remove("VarName");

要从会话状态中清除所有项目,请使用:

Session.Clear();
于 2013-01-18T09:51:22.257 回答
0

您的会话为空。您必须先检查会话中的空值,然后使用会话变量中存在的值。

尝试这个

if (!IsPostBack)
                {
                    try
                    {
                        if (Session["user.transaction.id"] != null && !string.IsNullOrEmpty(Session["user.transaction.id"].ToString()))
                        {
                            Label1.Text = Session["user.transaction.id"].ToString(); //Error Line
                        }

                    }
                    catch (Exception a8)
                    {
                        Label1.Text = a8.Message;
                    }
                }
于 2013-01-18T09:59:51.600 回答