0

我有以下全局列表 -

 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) 部分得到一个空引用异常。如何存储更改中的所有值以在单击按钮时可用?

4

2 回答 2

1

使用IsPostBack

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

将此代码添加到您的构造函数

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

否则你可以使用ViewState

于 2013-01-24T12:17:24.820 回答
1

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

CheckBox1_CheckedChanged更新列表后在事件中添加此代码

ViewState["Somename"]=changes;

Button5_Click在访问列表之前添加此代码

changes= (List<string> )ViewState["Somename"]
于 2013-01-24T12:23:31.750 回答