将值添加到全局列表

时间:2013-01-24 12:13:16

标签: c# asp.net arraylist

我有以下全球清单 -

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

    List<string> changes = null;

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            List<string> changes = new List<string>();
        }

我正在尝试将字符串值添加到changes,如此 -

 protected void CheckBox1_CheckedChanged(Object sender, EventArgs e)
    {

        CheckBox chk = (CheckBox)sender;
        DataListItem item = (DataListItem)chk.NamingContainer;

        TextBox txt = (TextBox)DataList1.Items[item.ItemIndex].FindControl("aliasTextBox");
        string text = txt.Text;


        changes.Add(text);

        ViewState["array"] = changes;

    }

所以我试图将dataList中的所有更改存储到changes中,以便在用户点击时

protected void Button5_Click(object sender, EventArgs e)
    {
        List<string> changes = (List<string>)ViewState["array"];

        foreach (string text in changes)
        {

            WebService1 ws = new WebService1();
            ws.WebMethod(text);
        }
    }

但是,当单击按钮时,我在 - changes.add(text)部分得到一个空引用异常。如何将所有值存储在按钮单击中可用的更改中?

2 个答案:

答案 0 :(得分:1)

使用 IsPostBack

并将您的List<string> changes = new List<string>();更改为List<string> changes = null;

将此代码添加到构造函数

if(!IsPostBack)
{
 changes = new List<string>();
}

其他方面,您可以使用 ViewState

答案 1 :(得分:1)

在回发后,您对变量所做的更改将不会保留。您应该将此列表“更改”的值保存到视图状态,会话或应用程序,以便即使在回发后也可以保留列表的值。

在更新列表

后,在CheckBox1_CheckedChanged事件中添加此代码
ViewState["Somename"]=changes;

在访问列表

之前,在Button5_Click中添加此代码
changes= (List<string> )ViewState["Somename"]