1

リストにアイテムを追加できるc#を使用してAsp.NetでWebアプリを作成しています。

私の問題は、ボタンをクリックして新しいアイテムをリストに追加するたびに、最後のアイテムだけが表示され、リストカウンターには1つしか表示されないことです。

私は何が間違っているのですか?

コードは次のとおりです。

public partial class home : System.Web.UI.Page
{
 List<string> messageboxs = new List<string>();
 public string val = "";
 public string data = "";

 protected void Button1_Click(object sender, EventArgs e)
 {
    val = "";
    messageboxs.Add(text1.Text);
    ListBox1.DataSource = messageboxs;
    ListBox1.DataBind();
    val = messageboxs.Count.ToString();
 }
}
4

5 に答える 5

4

リストはポストバック間で保持されません。

ボタンをクリックするたびに、ページクラスの新しいインスタンスが作成されるため、リストが作成されます。このリストは空です。

于 2012-12-13T10:33:02.277 に答える
3

ASP.NETページのライフサイクルの概要を読む必要があります。一言で言えば、ボタンをクリックするたびに、ページがポストバックされ、ページの新しいインスタンスが作成されます。そのページの各インスタンスで空のリストを初期化しているため、新しいアイテムをリストに追加すると、再び空になります。

あなたがする必要があるのmessageboxsは、ポストバックを越えてそれが持続することを可能にするどこかに保存することです。特定の例では、 ViewStateを使用できます。

public partial class home : System.Web.UI.Page
{
    private void Page_Load(object sender, EventArgs e)
    {
        if(!IsPostBack)
        {
            // initialise list
            ViewState["Messages"] = new List<string>();
        }
    }

    protected void Button1_Click(object sender, EventArgs e)
    {
        // get the old messages list
        var messages = (List<string>)ViewState["Messages"];
        messages.Add(text1.Text);
        ListBox1.DataSource = messages;
        ListBox1.DataBind();
        // store the new messages list
        ViewState["Messages"] = messages;
    }   
}
于 2012-12-13T10:36:50.963 に答える
1

問題は、ASP.Netの動作にあります。ASP.Netは、ボタンをクリックするたびに「ホームページ」ページを再作成します。次に、リストを再作成し、リストに1つのアイテムを追加します。ボタンのクリックの間にリストを保存する方法が必要です。それが、たとえば、セッションの目的です。

于 2012-12-13T10:33:46.407 に答える
0

リストは、ポストバックごとに再度作成されます。の既存のアイテムを調べて、ListBox1それらを再追加してからList<string>再バインドすることを検討する必要があります。

于 2012-12-13T10:34:06.023 に答える
0

メッセージボックスを次のように静的変数にします

static List messageboxs = new List();

ただし、これにより、任意のページ要求から変数にアクセスできるようになります。つまり、他の誰かがこのページを開いてアイテムを追加しようとすると、その人は他の誰かのリストにアイテムを追加することになります。

代わりに、セッション状態またはビュー状態を使用してみてください。

于 2012-12-13T10:46:56.600 に答える