0

为什么以下代码会产生错误“对象引用未设置为对象的实例,即使我在两个按钮单击事件中都使用设置会话方法?

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

Session["Account"] 可能为空。

于 2012-05-30T12:47:45.930 回答
0

在这里设置一个断点

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

然后按 F5 单步执行您的应用程序并将鼠标放在 Session["Account"] 上以检查该值 - 它可能为 null

于 2012-05-30T12:53:36.070 回答
0

这两个按钮是在同一页面上吗?如果是这样,请创建一个对设置会话变量的两个按钮都可访问的方法。确保检查它是否已经设置,以便只设置一次。

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
}

这样,您的会话始终设置为单击第一个按钮还是第二个按钮

于 2012-05-30T18:50:22.423 回答