0

我已经为此纠结了一天。我需要创建一个自定义控件,并且为了概念验证,我正在尝试创建 UpdatePanel 并在其中添加一个按钮。它总是会导致整页回帖

代码(自定义控件):

Imports System.Text
Imports System.Web.UI
Imports System.Web.UI.WebControls
Imports System.ComponentModel
Imports AjaxControlToolkit

<Designer(GetType(HMXICDSearchToolDesigner))> _
Public Class HMXICDSearchTool
Inherits HMXISBaseCompositeControl
Implements INamingContainer

Private Const DEFAULT_WIDTH As Integer = 650
Private Const DEFAULT_HEIGHT As Integer = 450

Private _pnlUpdate As UpdatePanel = Nothing
Private _btnTest As Button = Nothing
Private _lbl As Label = Nothing

Protected Overrides Sub CreateChildControls()
    MyBase.CreateChildControls()

    _pnlUpdate = New UpdatePanel()
    With _pnlUpdate
        .ID = "pnlUpdate"
        .ChildrenAsTriggers = False
        .UpdateMode = UpdatePanelUpdateMode.Conditional
    End With

    _btnTest = New Button()
    With _btnTest
        .ID = "btnTest"
        .Text = "Test Button"
        .CausesValidation = False
        AddHandler .Click, AddressOf Btn_Click
    End With

    _lbl = New Label()
    With _lbl
        .ID = "lbl"
        .Text = "Hello!"
    End With

    _pnlUpdate.ContentTemplateContainer.Controls.Add(_btnTest)
    _pnlUpdate.ContentTemplateContainer.Controls.Add(_lbl)

    Dim aTrigger As AsyncPostBackTrigger = New AsyncPostBackTrigger()
    With aTrigger
        .ControlID = "btnTest"
        .EventName = "Click"
    End With

    Me._pnlUpdate.Triggers.Add(aTrigger)

    Me.Controls.Add(_pnlUpdate)

    Me.Style.Add("background-color", "red")
    Me.Height = 500
    Me.Width = 500
End Sub

Protected Sub Btn_Click(ByVal Sender As Object, ByVal e As System.EventArgs)
    If Not Me.Page.IsPostBack Then
        Me._lbl.Text = "Async postback."
    End If
End Sub
End Class

任何想法将不胜感激。我曾尝试切换 ChildrenAsTriggers,将此代码放入 Me.Load 等。

4

1 回答 1

0

它一直在执行部分回发。

我犯了测试的错误,看看它是否是像这样的部分回发:

If Page.IsPostBack Then
   'something here
End

当我应该检查这个时

Me.ScriptManager.IsInAsyncPostback

这:即使它正在执行部分回Page.IsPostBack发也是如此。

于 2013-10-07T19:24:58.527 回答