2

2ページあります。first.aspx と second.aspx。first.aspx からすべてのコントロール値を取得するために、second.aspx にディレクティブを追加しました

<%@ PreviousPageType VirtualPath="~/PR.aspx" %>

以前のページ コントロールをすべて取得してラベルに設定するのは問題ありませんが、これらの値をプライベート変数に保存し、ページ ロード イベントが完了した後に再利用するのは大きな問題です。コード例を次に示します。別のメソッドで入力から値を取得しようとすると、何も追加されません。なんで?

    public partial class Second : System.Web.UI.Page
        {        
            List<string> input = new List<string>();
            protected void Page_Load(object sender, EventArgs e)
            {
                    if (Page.PreviousPage != null&&PreviousPage.IsCrossPagePostBack == true)
                    {
                        TextBox SourceTextBox11 (TextBox)Page.PreviousPage.FindControl("TextBox11");
                        if (SourceTextBox11 != null)
                        {
                            Label1.Text = SourceTextBox11.Text;
                            input.Add(SourceTextBox11.Text);
                        }
                     }
              }

            protected void SubmitBT_Click(object sender, EventArgs e)
        {
                  //do sth with input list<string>
                  //input has nothing in it here.
         }
       }
4

1 に答える 1

0

-clickSubmitBT_Clickイベントはポストバックで発生します。ただし、すべての変数 (およびコントロール) は、ページのライフサイクルの最後に破棄されます。Listそのため、たとえばViewStateorに永続化する方法が必要ですSession

public List<String> Input
{
    get
    {
        if (Session["Input"] == null)
        {
           Session["Input"] = new List<String>();
        }
        return (List<String>)Session["Input"]; 
    }
    set { Session["Input"] = value; }
}

ASP.NET アプリケーションで永続的なユーザー状態を管理するための 9 つのオプション

于 2013-02-19T21:43:11.210 に答える