我在ASP.NET中玩一点,这里有一些显示列表大小的代码和一些操作它的按钮。
我已经分离了类来创建带有构造函数的列表。这也是增加其大小的方法
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
public class Class1
{
public List<byte> Pole { get; set; }
public int velikost_pole { get; set; } //list size
public Class1() //constructor, default size is 3
{
List<byte> pole = new List<byte>();
for (byte a = 0; a < 3; a++)
{
pole.Add((byte)(a * a));
}
Pole = pole;
velikost_pole = Pole.Count;
}
public string zvetsit_pole() //method to increase the list size by adding item
{
if (Pole.Count < 6) //max size
{
Pole.Add((byte)(Pole.Count*Pole.Count+1));
velikost_pole = Pole.Count;
return "Pole zvetseno o 1";
}
else
{
return "Jiz nelze zvetsit";
}
}
}
在主文件中,对象被创建为全局变量,并且有一个按钮可以增加列表大小。但是,尺寸不会改变,它仍然是相同的
public partial class _Default : System.Web.UI.Page
{
Class1 objekt = new Class1(); //create the object
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button1_Click(object sender, EventArgs e)
{
Label1.Text = "Velikost pole je: " + objekt.velikost_pole.ToString() + "<br />";
for (int a=0;a<objekt.velikost_pole;a++)
{
Label1.Text += objekt.Pole[a].ToString() + " ";
}
}
protected void Button2_Click(object sender, EventArgs e) //call method to increase the size
{
Label1.Text = objekt.zvetsit_pole();
}
}
感谢您的想法。
答案 0 :(得分:7)
请记住,ASP.NET是无状态,因此每个请求都会创建一个全新的Page
对象。所以你的活动时间表如下所示:
Page
已创建objekt
已创建Page
已创建objekt
已创建(不与第一次请求相同的对象)Label1.Text
设置Page
已创建objekt
创建(不与前两个请求中的任何一个相同的对象)zvetsit_pole
名为Label1.Text
设置为返回值因此,按钮点击事件处理的是不同的对象,因此您无法在下一个操作中看到一个操作的结果。
答案是将objekt
放入某种类型的持久存储中,例如ViewState
,Cache
或Session
。如果你不知道哪个适合你的需要做一些研究并自己决定。
答案 1 :(得分:0)
每个请求都会创建_Default
类的新实例,相应地,objekt
也会成为Class1
的新实例。
这意味着您在一个请求中对objekt
所做的任何更改都不会反映在下一个请求中。
为了在请求之间保留更改,您需要将它们存储在某个位置。有不同的选项可以做到这一点,一些涉及使用用户的会话,另一些涉及使用页面的视图状态或可能将状态持久化到磁盘。您选择哪一个取决于您想要完成的目标。
有关其他信息,请参阅以下页面: