0

我知道这是一个常见问题,但我确信我的代码足够正确并且它不适合我。我有一个模态窗口,当它启动时,它会显示一个 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 增加,但测试变量没有增加。这是为什么?

4

1 回答 1

0

发现问题:按钮缺少 Click 处理程序。添加 AddHandler 后,一切顺利。

于 2019-10-06T05:49:27.850 回答