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]
中创建了交易ID。但是当我将信息发布到paymentgateway并发回时。我无法取回Session["user.transaction.id"]
并得到错误。我想知道如何解决这个问题。
答案 0 :(得分:1)
创建会话变量的正确方法是:
Session["VarName"] = value;
从会话中读取项目:
Label1.Text = Session["VarName"].ToString();
或者您可以将Add方法用作:
Session.Add("VarName", value);
无论哪种方式都可行。
接下来从会话状态中删除项目:
Session.Remove("VarName");
要清除会话状态中的所有项目,请使用:
Session.Clear();
答案 1 :(得分:1)
NullReferenceException
比他们应该更常见。
你什么都不能打电话给ToString()
。您应该检查,例如:
if (Session["user.transaction.id"] != null) {
Session["user.transaction.id"].ToString();
}
这是你应该习惯记住的东西,并学会不要假设任何东西都会成为某种东西。只需看看Label.Text
和a8.Message
:在这些情况下,Label
和a8
是事情的更加明确和“安全”,但每次您访问成员时在引用类型中,您应该知道您的变量具有对实例的引用。因此,这些例外很容易追查。
如果您在将用户发送到某处然后让他们返回时遇到此问题,则很可能用户离开的时间比为会话超时分配的时间长,因此开始新会话他们的回归。
答案 2 :(得分: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;
}
}