我知道这是一个常见问题,但我确信我的代码足够正确并且它不适合我。我有一个模态窗口,当它启动时,它会显示一个 UpdatePanel,其中有几个面板,其中一个是一个普通按钮。单击该按钮不提供任何回发(部分或全部)。理想情况下,我只想进行部分回发,但我现在无法获得任何类型的回发。这是我的一些代码:
对于脚本管理器:
myScriptManager.ID = "ScriptManager1"
myScriptManager.EnablePageMethods = True
myScriptManager.EnablePartialRendering = True
MainForm.Controls.Add(myScriptManager)
对于更新面板:
With BeginBroadcastPanel
.ID = "BeginBroadcastPanel"
.Attributes.Add("style", "display:flex;flex-direction:column;justify-contents:center;align-items:center;")
'.UpdateMode = UpdatePanelUpdateMode.Conditional
'.ChildrenAsTriggers = True
End With
对于按钮:
With lblBroadcastPanelLoginButton
.ID = "lblBroadcastPanelLoginButton"
.Text = "LOG IN"
.Attributes.Add("style", "font-weight:bold;margin:20px;width:50%;text-align:center;cursor:pointer;font-size:20pt;background:lightgray;border-radius:4px;padding:10px 10px 10px 10px;border:0px solid darkgray;")
'.Attributes.Add("onclick", "__doPostBack('<%=BeginBroadcastPanel.ClientID %>', null);")
'Dim t As New AsyncPostBackTrigger
't.ControlID = lblBroadcastPanelLoginButton.ClientID
't.EventName = "Click"
'BeginBroadcastPanel.Triggers.Add(t)
End With
如您所见,我尝试了许多不同的解决方案,例如设置 UpdateMode、ChildAsTriggers、添加 AsyncPostBackTrigger。只有 Javascript 可以工作,但它只会做一个完整的回发(我的理解是 Javascript 不应该是做部分回发的必要条件)。为了检查是否发生了部分回发,我有一个显示当前日期时间的字段。有什么想法吗?
编辑:我发现正在发生回发,但显示日期时间的文本字段没有更新。如果我在标签中显示日期时间,则表明日期时间正在增加。奇怪的是,IsPostBack 和 IsInAsyncPostBack 在每次回发时都评估为 True。同样奇怪的是,如果我增加一个公共整数(参见下面的示例),它只会在第一次回发时触发,但不会在任何后续回发时触发。
Public test As Integer
Public dttm As DateTime = DateTime.Now
Dim b As New Button
With b
test = test + 1
.Text = dttm.ToString("MM/dd/yyyy HH:mm:ss") & " - " & test.ToString & " - " & Page.IsPostBack
End With
BeginBroadcastPanel.ContentTemplateContainer.Controls.Add(b)
在上面的代码中,我在按钮上同时显示了 dttm 和 test 变量。dttm 增加,但测试变量没有增加。这是为什么?