ASP.NET和C#Page实例和ArrayList变量

时间:2014-12-18 14:51:42

标签: c# asp.net webforms

因此,从Windows应用程序进入Web应用程序并仍尝试欣赏一些基础知识。要求基本上是有一个文本框,一个按钮和一个标签。单击该按钮时,文本框将显示1到100之间的伪随机生成的数字。标签将以逗号分隔值的形式跟踪这些数字,而文本框将使用生成的最新进行更新每次单击按钮时编号。

在客户端浏览器中查看的网页有两个HTML控件和一个asp Web控件:

<input type="text" id="txtOne" runat="server"/>
<input type="button" id="btnOne" value="Generate" runat="server" onserverclick="btnOne_OnClick"/>
<asp:Literal ID="lblOne" runat="server"></asp:Literal>

在服务器上使用支持C#类:

    public partial class Contact : System.Web.UI.Page
{

    protected HtmlInputText txtOne = new HtmlInputText();
    protected HtmlInputButton btnOne = new HtmlInputButton();
    protected int randomNum;
    Random r = new Random();
    protected System.Collections.ArrayList numbers = new System.Collections.ArrayList();
    protected string text;

    protected void Page_Load(object sender, EventArgs e)
    {

    }

    protected void btnOne_OnClick(object sender, EventArgs e)
    {
        randomNum = r.Next(1, 100);
        txtOne.Value = randomNum.ToString();
        updateLabel(randomNum.ToString());
    }

    protected void updateLabel(string value)
    {
        numbers.Add(value);
        foreach (string number in numbers)
        {
            text += number + ',';
        }

        //Remove the end ','
        lblOne.Text = text.Substring(0, text.Length - 1);
    }

但是,单击该按钮时,只会将生成的最新数字输出到标签。我假设ArrayList将继续存储先前的值,迭代器循环将检索所有这些到文本变量。

当Page对象被发送回客户端时,是否会发送新的Page实例?这似乎是这种情况,如果是这样,用什么方法来解决这个问题?

我想我可以使用标签的值并每次用新值递增(代替ArrayList),但是我想用ArrayList逻辑解决它或者理解为什么这不是正确的。


TEMPORARY EDIT:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI.WebControls;

namespace myProj
{
    public partial class Contact : System.Web.UI.Page
    {

        protected TextBox txtOne = new TextBox();
        protected Button btnOne = new Button();
        protected int randomNum;
        Random r = new Random();
        protected List<string> numbers = new List<string>();
        protected string text;

        protected void btnOne_OnClick(object sender, EventArgs e)
        {
            //txtOne.Text = randomNum.ToString();
            randomNum = r.Next(1, 100);
            updateLabel(randomNum.ToString());
        }

        protected void updateLabel(string value)
        {
            if (Session["numbers"] != null)
            {
                numbers = (List<string>)Session["numbers"];
            }

            numbers.Add(value);
            Session["numbers"] = numbers;

            foreach (string number in numbers)
            {
                text += number + ',';
            }

            //Remove the end ','
            lblOne.Text = text.Substring(0, text.Length - 1);
        }

    }
}

1 个答案:

答案 0 :(得分:2)

  

每当点击按钮时,页面将刷新所有变量   重新初始化,因此arraylist将变得空虚,所以它将如何保留   所有价值观。您可能需要在Session中存储此arraylist而不是   从会话中读取并循环播放。

当点击按钮时,您将首先从会话中读取值并将其分配给数字,然后在其中添加新生成的数字,然后再将列表分配给会话。

Session["numbers"]=numbers;

从会话中读取

numbers=(ArrayList)Session["numbers"];

将updatelabel方法更改为下面给出的,一切都应该正常

protected void updateLabel(string value)
{
    if(Session["numbers"]!=null)
        numbers = (ArrayList)Session["numbers"];
    numbers.Add(value);
    Session["numbers"] = numbers;


    foreach (string number in numbers)
    {
        text += number + ',';
    }

    //Remove the end ','
    lblOne.Text = text.Substring(0, text.Length - 1);

}