c#asp.net对象引用丢失了

时间:2012-04-01 07:22:04

标签: c# asp.net object-reference

您好我正在做一个非常简单的Asp.net应用程序项目

 namespace WebApplication1
 {
 public partial class WebUserControl1 : System.Web.UI.UserControl
 {
    market m = new market();

    protected void Page_Load(object sender, EventArgs e)
    {


    }
    protected void button_clickSell(object sender, EventArgs e) 
    {


        float price = float.Parse(this.BoxIdPrezzo.Text);

        m.insertProd("xxx", 10, "yyy");
        m.addOfferForProd("ooo", 5, "gggg");
        m.insertProd(this.BoxIdDescrizione.Text,price,this.BoxIdUtente.Text);
        String s;
        m.outMarket(out s);  
        this.Output.Text = s;  //the output here work good
        this.Output.Visible = true;

    }
    protected void button_clickView(object sender, EventArgs e) 
    {
        String s;
        m.outMarket(out s);
        this.Output.Text = s;  // here seem to have lost the reference to product why?
        this.Output.Visible = true;
    }
}
}
问题是当我点击button1时调用button_clickSell一切正常但当我点击button2时调用button_clickView产品似乎不再出现在Market对象中,但这很奇怪,因为在市场对象中我有一个产品清单和m.outMarket首次合作。

3 个答案:

答案 0 :(得分:4)

这是因为页面的工作原理。每次您发出请求或回复页面时,该变量中的值都会丢失。

您需要在会话或类似的事情中保留它。

以下是使用会话的一个非常基本的示例。

    protected void Page_Load(object sender, EventArgs e)
    {
        if (Session["Collection"] == null)
        {
            Session["Collection"] = new List<int>();
        }//if
    }
    protected void button_clickSell(object sender, EventArgs e)
    {
        List<int> collection = (List<int>)Session["Collection"];
        collection.Add(7);
        collection.Add(9);
    }
    protected void button_clickView(object sender, EventArgs e)
    {
        List<int> collection = (List<int>)Session["Collection"];
        collection.Add(10);
    }

答案 1 :(得分:0)

您可以在MSDN上查看此帖子:ASP.NET Session State Overview

答案 2 :(得分:0)

  当需要信息时,应使用

Session   页面。现在关于躺在同一页面上的两个按钮的问题。所以   ViewState是最佳选择。

protected void Page_Load(object sender, EventArgs e)
{
     if (ViewState["Collection"] == null)
     {
            ViewState["Collection"] = new List<int>();
     }//if
}
protected void button_clickSell(object sender, EventArgs e)
{
     List<int> collection = (List<int>)ViewState["Collection"];
     collection.Add(7);
     collection.Add(9);
}
protected void button_clickView(object sender, EventArgs e)
{
     List<int> collection = (List<int>)ViewState["Collection"];
     collection.Add(10);
}