在visual studio 2005中的AJAX扩展控件timer中为什么不能实现变量自加?
如:把Timer控件的interval设为1000(1秒),代码publicpartialclass_Default:System.Web.UI.Page{inti;pr...
如:把Timer控件的interval设为1000(1秒),
代码
public partial class _Default : System.Web.UI.Page
{ int i;
protected void Page_Load(object sender, EventArgs e)
{
i=0;
}
protected void Timer1_Tick(object sender, EventArgs e)
{
i=i+1;
lable1.text=i.ToString();
}
}
执行后lable1只显示"1",难道不应该是每过一秒就加1吗??
我是新手...
注:我已经把timer,lable1放在了UpdatePanel控件里了 展开
代码
public partial class _Default : System.Web.UI.Page
{ int i;
protected void Page_Load(object sender, EventArgs e)
{
i=0;
}
protected void Timer1_Tick(object sender, EventArgs e)
{
i=i+1;
lable1.text=i.ToString();
}
}
执行后lable1只显示"1",难道不应该是每过一秒就加1吗??
我是新手...
注:我已经把timer,lable1放在了UpdatePanel控件里了 展开
4个回答
展开全部
这是因为每次PostBack的时候又执行了一次i=0,其实即使不设定i=0,程序在每次加载页面时依然会初始化变量i的。
所以你必须找一个能够在页面回发时也能够保持其状态的东西(不要想ViewState,这东西在AJAX下不好控制),可以使用Hidden控件来完成。
首先设置Hidden控件的Value值为0,然后:
protected void Timer1_Tick(object sender, EventArgs e)
{
int hiddenValue=int.Parse(Hidden1.Value);//你的Hidden控件ID是Hidden1
hiddenValue++;
Hidden.Value=hiddenValue.ToString();//这步一定要写,记录加1后的值
lable1.text=hiddenValue.ToString(); //如果要显示出来就这样写
}
PS:不必设置变量i了,另外Hidden控件和Label都必须放在UpdatePanel里才可以
所以你必须找一个能够在页面回发时也能够保持其状态的东西(不要想ViewState,这东西在AJAX下不好控制),可以使用Hidden控件来完成。
首先设置Hidden控件的Value值为0,然后:
protected void Timer1_Tick(object sender, EventArgs e)
{
int hiddenValue=int.Parse(Hidden1.Value);//你的Hidden控件ID是Hidden1
hiddenValue++;
Hidden.Value=hiddenValue.ToString();//这步一定要写,记录加1后的值
lable1.text=hiddenValue.ToString(); //如果要显示出来就这样写
}
PS:不必设置变量i了,另外Hidden控件和Label都必须放在UpdatePanel里才可以
展开全部
我好像遇到过类似的问题,你把你的网站放到别的电脑上试一下,貌似我换了台电脑就好了,好像是操作系统的问题,但最后也没查出来
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
首先
服务器端
你在lode事件中写 i=0; 当下次timer事件触发 时候它每次将会重新拿打到i i还是0的哦 所以 将永远是1
如果你设置变量 每次timer事件触发 他都会取原来的值在进行i=i+1; 也就是每次+完后 i又重新赋值了 又变成了0
建议你用个控件 在初始化的时候就给lable赋值 (数字值) 然后用这个lable的值 做变量++运算
--例如:代码
重写初始化事件
protected override void OnInit(EventArgs e)
{
int i = 1;
this.Label1.Text = i.ToString();
this.Timer1.Tick += new EventHandler<EventArgs>(Timer1_Tick);
base.OnInit(e);
}
this.Timer1.Tick += new EventHandler<EventArgs>(Timer1_Tick);
如果你写在服务器这里 客户端就不要调用了 也就是去掉客户端的Timer1_Tick事件 反之如果客户端写了 这里也可以省略
接着写timer事件
例如:
protected void Timer1_Tick(object sender, EventArgs e)
{
int c = Convert.ToInt32(this.Label1.Text)+1;
this.Label1.Text = c.ToString();
}
客户端
如果你的timer控件放在 updatepanel 外面就要
+个Triggers 要不会总刷新的哦
<asp:UpdatePanel>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="Timer1" EventName="Tick"/>
</Triggers>
</asp:UpdatePanel>
如果在服务起注册了事件 这里<asp:Timer ID="Timer1" runat="server" Interval="500" > 就不要写OnTick= 事件了 写了会调用2次 也就是每次+2了
---最后注意的地方
有时候也许会--不在客户端设置时间 把 this.Timer1.Interval = 500; 这个写timer事件中 这样是不行的 想写在服务器这里 可以写在lode事件中或初始化事件中
服务器端
你在lode事件中写 i=0; 当下次timer事件触发 时候它每次将会重新拿打到i i还是0的哦 所以 将永远是1
如果你设置变量 每次timer事件触发 他都会取原来的值在进行i=i+1; 也就是每次+完后 i又重新赋值了 又变成了0
建议你用个控件 在初始化的时候就给lable赋值 (数字值) 然后用这个lable的值 做变量++运算
--例如:代码
重写初始化事件
protected override void OnInit(EventArgs e)
{
int i = 1;
this.Label1.Text = i.ToString();
this.Timer1.Tick += new EventHandler<EventArgs>(Timer1_Tick);
base.OnInit(e);
}
this.Timer1.Tick += new EventHandler<EventArgs>(Timer1_Tick);
如果你写在服务器这里 客户端就不要调用了 也就是去掉客户端的Timer1_Tick事件 反之如果客户端写了 这里也可以省略
接着写timer事件
例如:
protected void Timer1_Tick(object sender, EventArgs e)
{
int c = Convert.ToInt32(this.Label1.Text)+1;
this.Label1.Text = c.ToString();
}
客户端
如果你的timer控件放在 updatepanel 外面就要
+个Triggers 要不会总刷新的哦
<asp:UpdatePanel>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="Timer1" EventName="Tick"/>
</Triggers>
</asp:UpdatePanel>
如果在服务起注册了事件 这里<asp:Timer ID="Timer1" runat="server" Interval="500" > 就不要写OnTick= 事件了 写了会调用2次 也就是每次+2了
---最后注意的地方
有时候也许会--不在客户端设置时间 把 this.Timer1.Interval = 500; 这个写timer事件中 这样是不行的 想写在服务器这里 可以写在lode事件中或初始化事件中
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
protected void Page_Load(object sender, EventArgs e)
{
if(!IsPostBack)
{
i=0;
}
}
在PageLoad里加一句再看看
{
if(!IsPostBack)
{
i=0;
}
}
在PageLoad里加一句再看看
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询