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)セクションでnull参照例外が発生します。ボタンクリックで利用できるように、すべての値を変更に保存するにはどうすればよいですか?

4

2 に答える 2

1

変数に加えている変更は、ポストバック後も保持されません。このリストの値'changes'をビューステート、セッション、またはアプリケーションに保存して、ポストバック後もリストの値を保持できるようにする必要があります。

CheckBox1_CheckedChangedリストを更新した後、イベントにこのコードを追加します

ViewState["Somename"]=changes;

Button5_Clickリストにアクセスする前に、このコードを追加してください

changes= (List<string> )ViewState["Somename"]
于 2013-01-24T12:23:31.750 に答える
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 に答える