因此,从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);
}
}
}
答案 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);
}