c# 一个webform工程使用Timers定时器不能改变Lable文本的值吗?

Z张天择 2019-08-15 12:24:47

前端:
<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title></title>
</head>
<body>
<div>
<asp:Label ID="lab_ChekPayResult" runat="server" Text="Label"></asp:Label>

</div>

</body>

</html>

后端:
protected void Page_Load(object sender, EventArgs e)
{

System.Timers.Timer timer = new System.Timers.Timer();
timer.Enabled = true;
timer.Interval = 30000; //执行间隔时间,单位为毫秒;
timer.Start();
timer.Elapsed += new System.Timers.ElapsedEventHandler(test);

}

private void test(object source, ElapsedEventArgs e)
{
int i = FacadeManage.aideTreasureFacade.ChekPayResult(orderid, price); //此处查询永远为 1.orderid, price有全局变量
if (i == 1)
{
lab_ChekPayResult.Text = "支付成功, 订单号: " + orderid;
}
else
{
lab_ChekPayResult.Text = "支付失败, 订单号: " + orderid;
return;
}
}



很纳闷~开始以为可以直接使用Response.Redirect();跳转,然后查资料发现不可以这样使用,具体原因半醒半梦。有知道的大佬提点一下,万分感谢!然后我就使用Lable赋值还是不可以。
现在做的是一个支付,支付成功之后,通过定时器去数据库查看是否支付成功,支付成功后显示支付结果。或者跳转界面也可以!!!望赐教。。。。。。。。
...全文
342 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
XBodhi. 2019-08-20
  • 打赏
  • 举报
回复
首先 ,楼上很多的,说法是错误的,它是 asp.net 不是 windows ,你直接用 Timer ,改变值是要从新请求的,因为 页面在客户端,代码在服务端。所以,你这种推荐,你用 interval 或 timeout JS 方法来做。否则会造成线程问题。要不你就只能实时的和服务端通信了。
by_封爱 2019-08-19
  • 打赏
  • 举报
回复
引用 14 楼 wanghui0380 的回复:
一群在这里为了几个名词乱战,几个名词有啥好争的,楼主先把问题解决才是
哈哈,一个问题引发的大战. 这个问题对LZ来说 UpdatePanel应该是最好的解决方案了.. 其他的我觉得对LZ来说可能稍微难了一些. LZ直接搜索"asp.net UpdatePanel Timer " 即可找到解决方案...
wanghui0380 2019-08-19
  • 打赏
  • 举报
回复
前端?后端? 好吧,又是老问题。也别折腾了。 ajax,websocket,SSE,UpdatePanel,SignalR 都行 楼主自己选一个实现就行,这帖子到此为止把,楼主任选一个解决问题就行,我不希望又像上一个帖子 一群在这里为了几个名词乱战,几个名词有啥好争的,楼主先把问题解决才是
yulei6 2019-08-19
  • 打赏
  • 举报
回复
引用 12 楼 by_封爱 的回复:
[quote=引用 2 楼 北京.NET-6年 的回复:]
this.lab_ChekPayResult.Invoke(new Action(() =>
{
lab_ChekPayResult.Text = "支付成功, 订单号: " + orderid;
}));


引用 11 楼 yulei6 的回复:
改的时候这样写就行了
this.Invoke(new EventHandler(delegate
{
Lable1.Text="新文本";
}));


人家这是网页 又不是 winform 写这玩意怎么可能有用...

[/quote]
哈哈哈,看蒙了
by_封爱 2019-08-19
  • 打赏
  • 举报
回复
引用 2 楼 北京.NET-6年 的回复:
this.lab_ChekPayResult.Invoke(new Action(() => { lab_ChekPayResult.Text = "支付成功, 订单号: " + orderid; }));
引用 11 楼 yulei6 的回复:
改的时候这样写就行了 this.Invoke(new EventHandler(delegate { Lable1.Text="新文本"; }));
人家这是网页 又不是 winform 写这玩意怎么可能有用...
yulei6 2019-08-19
  • 打赏
  • 举报
回复
改的时候这样写就行了
this.Invoke(new EventHandler(delegate
{
Lable1.Text="新文本";
}));
冰川711 2019-08-15
  • 打赏
  • 举报
回复
正常接入支付接口, 支付成功 接口那边会有回调的, 像你这种情况 最好不要用服务器控件, 用js 轮询 异步提交 这样页面就不用刷新
stherix 2019-08-15
  • 打赏
  • 举报
回复
webform的话 应该要重新加载页面才能够刷新文本了 一般这样的请求都是ajax向服务器发请求,服务器等到结果再回传
Z张天择 2019-08-15
  • 打赏
  • 举报
回复
引用 3 楼 X-i-n 的回复:
HTML代码一旦生成,传到客户端(浏览器),就完成他的历史使命了。web开发需要搞清楚服务端做什么事,作为客户端的浏览器做什么事。
做完这个发现了自己很多问题,这在学习中。谢谢!
Z张天择 2019-08-15
  • 打赏
  • 举报
回复
引用 2 楼 北京.NET-6年 的回复:
this.lab_ChekPayResult.Invoke(new Action(() => { lab_ChekPayResult.Text = "支付成功, 订单号: " + orderid; }));
我试试
Z张天择 2019-08-15
  • 打赏
  • 举报
回复
引用 1 楼 冰川711 的回复:
正常接入支付接口, 支付成功 接口那边会有回调的, 像你这种情况 最好不要用服务器控件, 用js 轮询 异步提交 这样页面就不用刷新
他那边确实有回调成功的。但是那边因为各种问题他拉不起来,让我我自己写一个。就卡在这块了。我试试用js,感谢!
zhulong1111 2019-08-15
  • 打赏
  • 举报
回复
1.不管微信、支付宝 支付 支付成功后会回调函数;
2.在支付成功的回调函数里面处理你的业务,比如更改订单状态;
3.成功页面一般情况都是一个静态的html,不需要处理任何逻辑,若要做个定时跳转,用jq就可以了
ManBOyyy 2019-08-15
  • 打赏
  • 举报
回复
Web用局部刷新UpdatePanel
¿?¿? 2019-08-15
  • 打赏
  • 举报
回复
用js定时器吧
X-i-n 2019-08-15
  • 打赏
  • 举报
回复
HTML代码一旦生成,传到客户端(浏览器),就完成他的历史使命了。web开发需要搞清楚服务端做什么事,作为客户端的浏览器做什么事。
北京.NET 2019-08-15
  • 打赏
  • 举报
回复
this.lab_ChekPayResult.Invoke(new Action(() =>
{
lab_ChekPayResult.Text = "支付成功, 订单号: " + orderid;
}));

62,025

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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