我有点陷入困境。我觉得解决方案应该是相当直接的,但出于某种原因,我完全没有想法。
这是问题所在。我有一个带有几个按钮的用户控件。将它们视为“开”和“关”。单击任一按钮时,将调用异步方法。如果方法成功,则触发事件。在这个事件中,我想更新两个按钮的enabled属性,这样一次只能点击一个按钮。问题是我对属性所做的任何更改都不会显示在屏幕上,因为回发已经完成。我尝试在UpdatePanel中包装按钮但是我得到一个“Update方法只能在Render'错误之前在ID为'xxxx'的UpdatePanel上调用。我理解为什么会出现问题,但我想不出解决方案。帮助!< / p>
理想情况下,我想做的只是在事件中调用一个方法来更新UI,但我不知道是否可能。
修改
这是一些示例代码。我无法发布确切的代码,但这解释了问题:
Partial Class ExampleUserControl
Inherits Inherits System.Web.UI.UserControl
Private WithEvents obj As MyObj
Private Sub btnOn_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnOn.Click
obj = New MyObj()
obj.On() ' Calls OnEvent on success
End Sub
Private Sub btnOff_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnOff.Click
obj = New MyObj()
obj.Off() ' Calls OffEvent on success
End Sub
Private Sub On() Handles obj.OnEvent
btnOn.Enabled = False
btnOff.Enabled = True
'updatePanel.Update() This throws an exception
End Sub
Private Sub Off() Handles obj.OffEvent
btnOn.Enabled = True
btnOff.Enabled = False
'updatePanel.Update() This throws an exception
End Sub
End Class
答案 0 :(得分:1)
你不能只是将html“推送”到浏览器,更新面板。您只能对浏览器中的“拉”做出反应。
因此,您需要每隔 x 秒让更新面板自行刷新一次。 然后您可以检查服务器端状态并相应地更新面板。
例如参见:http://ajax.net-tutorials.com/controls/timer-control/
操作完成后,别忘了关闭计时器。
答案 1 :(得分:0)
我不能评论,否则我会,所以我会在这里问我的问题。您是否尝试将启用逻辑直接放在btnOn_Click事件处理程序中并将btnOn作为触发器添加到updatepanel?我担心的是,辅助事件不是UpdatePanel上的触发器,因此更新事件不会查找该事件。
像这样:
Private Sub btnOn_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnOn.Click
btnOn.Enabled = False
btnOff.Enabled = True
End Sub
答案 2 :(得分:0)
使用UpdatePanel解决此问题。
为你的按钮制作AsyncPostBackTrigger。根据您在后面的代码上的逻辑启用或相应地禁用它们。
或者,从服务器端注册客户端脚本。