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

セッションに情報を保存するために使用したコード

試す {

        _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);
        }

私はもともとトランザクションIDをで作成しましたSession["user.transaction.id]。しかし、私が情報をペイメントゲートウェイに投稿してポストバックするとき。戻ることができずSession["user.transaction.id"]、エラーが発生しました。この問題を解決する方法を知りたいのですが。

4

3 に答える 3

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 に答える
1

NullReferenceExceptionは、本来あるべきよりもはるかに一般的です。

あなたは何も呼び出すことはできませToString()ん。次のように確認する必要があります。

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

これはあなたが心に留めておくべきことであり、何かが何かになると想定しないことを学ぶべきです. Label.Textandを見てくださいa8.Message。これらの場合、 and はより明確で「安全」Labelですa8が、参照型のメンバーにアクセスするたびに、変数がインスタンスへの参照を持っていることを知っておく必要があります。したがって、これらの例外は簡単に追跡できます。

ユーザーをどこかに送り返してもらう過程でこの問題が発生する場合は、ユーザーがセッション タイムアウトに割り当てられた時間よりも長い時間離れている可能性が非常に高く、ユーザーが戻ったときに新しいセッションが開始されます。

于 2013-01-18T09:55:38.387 に答える
0

セッションがnullです。最初にセッションでnull値をチェックしてから、セッション変数に存在する値を使用する必要があります。

これを試して

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 に答える