6

我的情况是这样的:当用户按下添加按钮时,我有这些列表,其中插入了数据,但我猜在回发时列表被重新归零。你如何保存它们?我一直在寻找答案,但我想我不太明白如何使用会话等。

我对 ASP.net 很陌生,而且似乎用 C# 也好不到哪里去。

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


 List<string> code = new List<string>();


protected void Page_Load(object sender, EventArgs e)
{
    //bleh   

}

protected void cmdAdd_Click(object sender, EventArgs e)
{

    code.Add(lstCode.Text);
}
4

3 回答 3

16

只需使用此属性来存储信息:

public List<string> Code
{
    get
    {
        if(HttpContext.Current.Session["Code"] == null)
        {
            HttpContext.Current.Session["Code"] = new List<string>();
        }
        return HttpContext.Current.Session["Code"] as List<string>;
    }
    set
    {
        HttpContext.Current.Session["Code"] = value;
    }

}
于 2012-04-23T20:26:35.653 回答
3

这在 ASP.NET 中很奇怪。每当您以编程方式将项目添加到集合控件(列表框、组合框)时,您必须在每次回发时重新填充该控件。

这是因为 Viewstate 只知道在页面渲染周期中添加的项目。在客户端添加项目只在第一次有效,然后项目就消失了。

尝试这个:

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

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                 Session["MyList"] = new List<string>();
            }   
            ComboBox cbo = myComboBox; //this is the combobox in your page
            cbo.DataSource = (List<string>)Session["MyList"];
            cbo.DataBind();
        }




        protected void cmdAdd_Click(object sender, EventArgs e)
        {
            List<string> code = Session["MyList"];
            code.Add(lstCode.Text);
            Session["MyList"] = code;  
            myComboBox.DataSource = code;
            myComboBox.DataBind();
        }
    }
于 2012-04-23T20:22:02.853 回答
1

您不能在回传之间保留值。

您可以使用 session 来保留列表:

// store the list in the session
List<string> code=new List<string>();

protected void Page_Load(object sender, EventArgs e)
{
 if(!IsPostBack)
  Session["codeList"]=code;

}
 // use the list
void fn()
{
 code=List<string>(Session["codeList"]); // downcast to List<string> 
 code.Add("some string"); // insert in the list
 Session["codeList"]=code; // save it again
}
于 2012-04-23T20:24:56.543 回答