日期:2014-05-18  浏览次数:20841 次

一个Button调用一个类的实体对象,类方法为+=1 并显示
问题描述 一个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());

  } 
   
  }

------解决方案--------------------
if (!Page.IsPostBack)
{
mydevice.add();
Response.Write(mydevice.filename.ToString());

 这行代码说明你只是在初次请求页面的时候执行了add方法 把判断拿掉 需要执行一次的只有初始化mydevice.filename 字段
------解决方案--------------------
断点调试一下就知道了
------解决方案--------------------
button中加上if (!Page.IsPostBack),那么只在第一次加载页面时执行一次,下次就跳过了,去掉这个判断
------解决方案--------------------
C# code
protected void Button1_Click(object sender, EventArgs e)
{
    mydevice.add();
    Response.Write(mydevice.filename.ToString());
}

------解决方案--------------------
是因为每次点击按钮都会引起页面刷新, mydevice 会被重新创建,里面的值会被重新初始化,做成static的,就行filename一样

或者用单例模式,让 mydevice new的时候返回单例模式
------解决方案--------------------
加上红字部分
public static mydevicelist.mydevicelist mydevice = new mydevicelist.mydevicelist();
------解决方案--------------------
放到类中那就是实例变量 每次访问其实都重新初始化了 
探讨

如果我不调用类 只是利用全局变量 filename 在load 及button事件中 filename++ 就可以一直能看到变量在增加,放到类中就不行