0

ボタン クリック イベントの両方で set session メソッドを使用している場合でも、次のコードで「オブジェクト参照がオブジェクトのインスタンスに設定されていません」というエラーが発生するのはなぜですか?

public partial class MergePopUp : System.Web.UI.Page
{

List<MergeAccounts> Mlist = new List<MergeAccounts>();

protected void Page_Load(object sender, EventArgs e)
{

}
private void SetSession()
{
    if (Session["Account"] == null)
    {
        Session["Account"] = Mlist;
    }
}


protected void AddToMergeList_Click(object sender, EventArgs e)
{
    MergeAccounts obj = new MergeAccounts();
    obj.AccountNumber = Convert.ToInt32(AccountNumber.Text);
    obj.PinNumber = Convert.ToInt32(PinNumber.Text);
    int temp = obj.IsAccNoValid(obj.AccountNumber, obj.PinNumber);
    if (temp == 0)
    {
        FoundOrNot.Visible = true;
        FoundOrNot.Text = "Enter a valid Pin Number against this Account number";
    }
    else
    {
        DataSet MyDataSet = obj.ShowDetails(obj.AccountNumber, obj.PinNumber);
        foreach (DataRow myRow in MyDataSet.Tables[0].Rows)
        {
            AccountTitle.Text = myRow["Title"].ToString();
            Balance.Text = myRow["Balance"].ToString();
            CreationDate.Text = myRow["CreationDate"].ToString();
        }
        obj.AccountTitle = AccountTitle.Text;
        obj.Balance = Convert.ToDouble(Balance.Text);
        obj.CreationDate = Convert.ToDateTime(CreationDate.Text);
        Mlist.Add(obj);
        Session["Account"] = Mlist;
        SetSession();
    }
}
protected void AddNext_Click(object sender, EventArgs e)
{
    foreach (TextBox i in this.Page.Form.Controls.OfType<TextBox>().ToList())
    {
        i.Text = null;
    }
    FoundOrNot.Visible = false;
}
protected void CheckList_Click(object sender, EventArgs e)
{
    SetSession();
    Response.Redirect("Merge.spx");
}

}
4

3 に答える 3

1

セッション ["アカウント"] はおそらく null です。

于 2012-05-30T12:47:45.930 に答える
0

同じページに2つのボタンがありますか?その場合は、セッション変数が設定されている両方のボタンにアクセスできるメソッドを作成します。一度だけ設定されるように、すでに設定されているかどうかを確認してください。

private void SetSession()
{
   if(Session["Account"] == null)
      Session["Account"] = "Value";
   else
      //what do you want to do here
}


protected void button1_click(.....)
{
    SetSession();
    //do something
}

protected void button2_click(....)
{
    SetSession();
    //redirect
}

これにより、セッションは常に最初のボタンまたは2番目のボタンがクリックされたかどうかに設定されます

于 2012-05-30T18:50:22.423 に答える
0

ここにブレークポイントを置きます

Mlit = (List<MergeAccounts>)Session["Account"];

次に、F5 キーを押してアプリケーションをステップ実行し、マウスを Session["Account"] に置いて値を調べます - おそらく null です

于 2012-05-30T12:53:36.070 に答える