一个Button调用一个类的实体对象,类方法为+=1 并显示

chenfeng3000 2012-06-11 03:00:44
问题描述 一个Button调用一个类的实体对象device,类方法为+=1 并显示 类的方法add 为filename+=1 (filename 定义为int) 反复按buton1 结果貌似只执行一次啊,是不是我的loadpage 写错了 还是 类初始化的地方不对呢 请大家帮忙啊,我要的结果是 按十次按钮, 能够调用device.add十次,我试过了 按一次按钮,时间内安排一个for(i=0;i<10;i++)就可以的,大家帮挑错啊

public partial class _Default : System.Web.UI.Page
{
public static device_list[] device = new device_list[300];
public static int filename;
public mydevicelist.mydevicelist mydevice = new mydevicelist.mydevicelist();
protected void Page_Load(object sender, EventArgs e)
{

if(!Page.IsPostBack)
{
filename = 0;
mydevice.filename = 1;
}

}
protected void Button1_Click(object sender, EventArgs e)
{

if (!Page.IsPostBack)
{
mydevice.add();
Response.Write(mydevice.filename.ToString());

}

}
...全文
182 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
chenfeng3000 2012-06-11
  • 打赏
  • 举报
回复
问题解决了· public static mydevicelist.mydevicelist mydevice = new mydevicelist.mydevicelist();
设置成静态类就解决了, 高兴 散分
xboxeer 2012-06-11
  • 打赏
  • 举报
回复
放到类中那就是实例变量 每次访问其实都重新初始化了
[Quote=引用 7 楼 的回复:]

如果我不调用类 只是利用全局变量 filename 在load 及button事件中 filename++ 就可以一直能看到变量在增加,放到类中就不行
[/Quote]
__天涯寻梦 2012-06-11
  • 打赏
  • 举报
回复
加上红字部分
public static mydevicelist.mydevicelist mydevice = new mydevicelist.mydevicelist();
chenfeng3000 2012-06-11
  • 打赏
  • 举报
回复
public class mydevicelist
{
public device_list2[] device = new device_list2[300];
public int filename;
public mydevicelist()
{

filename = 0;

// throw new System.NotImplementedException();
}



public void RecordInit()
{
string dt1;
int i, number = 0;
// filename = 0;
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load("c:\\device.xml");
XmlNodeList nodeList = xmlDoc.SelectSingleNode("devices").ChildNodes;//获取bookstore节点的所有子节点
foreach (XmlNode xn in nodeList)//遍历所有子节点
{
number = number + 1;
device[number].id = xn.ChildNodes.Item(0).InnerText;
device[number].name = xn.ChildNodes.Item(1).InnerText;
device[number].type = xn.ChildNodes.Item(2).InnerText;
device[number].address = xn.ChildNodes.Item(3).InnerText;
device[number].ip = xn.ChildNodes.Item(4).InnerText;
device[number].status = xn.ChildNodes.Item(6).InnerText;
device[number].onlinetime = xn.ChildNodes.Item(7).InnerText;
device[number].totaltime = xn.ChildNodes.Item(8).InnerText;
device[number].errortimes = xn.ChildNodes.Item(9).InnerText;
device[number].respair_number = xn.ChildNodes.Item(9).InnerText;
}
number = number + 1;
device[number].id = "NULL";
filename = filename + 1;
dt1 = "c:\\" + filename.ToString() + ".xml";

xmlDoc.Save(dt1);//保存。


}
bdmh 2012-06-11
  • 打赏
  • 举报
回复
是因为每次点击按钮都会引起页面刷新, mydevice 会被重新创建,里面的值会被重新初始化,做成static的,就行filename一样

或者用单例模式,让 mydevice new的时候返回单例模式
chenfeng3000 2012-06-11
  • 打赏
  • 举报
回复
如果我不调用类 只是利用全局变量 filename 在load 及button事件中 filename++ 就可以一直能看到变量在增加,放到类中就不行
__天涯寻梦 2012-06-11
  • 打赏
  • 举报
回复
protected void Button1_Click(object sender, EventArgs e)
{
mydevice.add();
Response.Write(mydevice.filename.ToString());
}

再有问题把 mydevice 内容发上来看看
chenfeng3000 2012-06-11
  • 打赏
  • 举报
回复
if (!Page.IsPostBack)
注释掉了 ,还是不行啊
chenfeng3000 2012-06-11
  • 打赏
  • 举报
回复
if (!Page.IsPostBack)
语句注释掉了,还是不行啊 感觉 BUTTON只是做了一次啊
bdmh 2012-06-11
  • 打赏
  • 举报
回复
button中加上if (!Page.IsPostBack),那么只在第一次加载页面时执行一次,下次就跳过了,去掉这个判断
  • 打赏
  • 举报
回复
断点调试一下就知道了
xboxeer 2012-06-11
  • 打赏
  • 举报
回复
if (!Page.IsPostBack)
{
mydevice.add();
Response.Write(mydevice.filename.ToString());

这行代码说明你只是在初次请求页面的时候执行了add方法 把判断拿掉 需要执行一次的只有初始化mydevice.filename 字段

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧