我有以下全球清单 -
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)部分得到一个空引用异常。如何将所有值存储在按钮单击中可用的更改中?
答案 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"]