2012-04-16 29 views
0

試圖找出如何鉤入某些Web部件動詞事件;具體來說,我想知道用戶何時最小化或恢復任何Web部件,以及哪一個。我不在一個共享平臺 - 嚴格的asp.net(4)ajax(2)。WebPartZone動詞的事件名稱

我稱之爲我的Web部件的頁面加載下面的代碼(我的Web部件繼承用戶控件和器具IWebPart):

Sub test_WebPartZoneVerbEventHandlers() 

    Dim i As Integer = 0 

    For Each z As WebPartZone In WebPartManager.GetCurrentWebPartManager(Me.Page).Zones 
     Dim restoreVerb As WebPartVerb = z.RestoreVerb 
     Dim minimizeVerb As WebPartVerb = z.MinimizeVerb 
     If Not IsNothing(restoreVerb) Then 
      If Not IsNothing(restoreVerb.ClientClickHandler) Then 
       testTextArea.InnerHtml = testTextArea.InnerHtml & i & "<br/>" & restoreVerb.ClientClickHandler 
      End If 

      If Not IsNothing(restoreVerb.ServerClickHandler) Then 
       testTextArea.InnerHtml = testTextArea.InnerHtml & i & "<br/>" & restoreVerb.ServerClickHandler().ToString() 

      End If 
     End If 

     If Not IsNothing(minimizeVerb) Then 
      If Not IsNothing(minimizeVerb.ClientClickHandler) Then 
       testTextArea.InnerHtml = testTextArea.InnerHtml & i & "<br/>" & minimizeVerb.ClientClickHandler 
      End If 

      If Not IsNothing(minimizeVerb.ServerClickHandler) Then 
       testTextArea.InnerHtml = testTextArea.InnerHtml & i & "<br/>" & minimizeVerb.ServerClickHandler().ToString() 

      End If 

     End If 

     i = i + 1 
    Next 

End Sub 

但我沒有得到處理程序的任何名稱。下面是輸出(testTextArea的內容):

0<br/>0<br/>1<br/>1<br/>2<br/>2<br/>0<br/>0<br/>1<br/>1<br/>2<br/>2<br/> 

誰知道爲什麼什麼都不顯示了客戶機/服務器單擊處理呢?

+0

順便說一句,對於我來說,恢復和最小化動詞是Web部件區域的成員,而不是Web部件本身,因爲每個Web部件都有自己的似乎獨立運行的最小/恢復動詞,這似乎很奇怪。 – pabrams 2012-04-16 16:12:50

回答

0

無法弄清楚事件名稱是什麼,並坦率地說,我厭倦了UpdatePanels,想着完全擺脫它們,但我能通過覆蓋Web上的動詞屬性來解決我的問題部分。

Imports ((myprojectName)).icBase 
Imports System.Web.UI.WebControls.WebParts 

''' <summary> 
''' Base class for web parts. 
''' </summary> 
''' <remarks></remarks> 
Public MustInherit Class icBaseWebPartControl 
    Inherits icBaseUserControlAjax 
    Implements IWebPart, IWebActionable 


#Region "IWebPart Properties" 

    Private _Title As String 
    Private _TitleUrl As String 
    Private _TitleIconImageUrl As String 
    Private _Description As String 
    Private _CatalogIconImageUrl As String 

    Public ReadOnly Property Subtitle As String Implements IWebPart.Subtitle 
     Get 
      Return Nothing 
     End Get 
    End Property 
    Public Property Title() As String Implements IWebPart.Title 
     Get 
      Return Me._Title 
     End Get 
     Set(ByVal value As String) 
      Me._Title = value 
     End Set 
    End Property 
    Public Property Description() As String Implements IWebPart.Description 
     Get 
      Return Me._Description 
     End Get 
     Set(ByVal value As String) 
      Me._Description = value 
     End Set 
    End Property 

    Public Property TitleUrl() As String Implements IWebPart.TitleUrl 
     Get 
      Return Me._TitleUrl 
     End Get 
     Set(ByVal value As String) 
      Me._TitleUrl = value 
     End Set 
    End Property 
    Public Property TitleIconImageUrl() As String Implements IWebPart.TitleIconImageUrl 
     Get 
      Return Me._TitleIconImageUrl 
     End Get 
     Set(ByVal value As String) 
      Me._TitleIconImageUrl = value 
     End Set 
    End Property 

    Public Property CatalogIconImageUrl() As String Implements IWebPart.CatalogIconImageUrl 
     Get 
      Return Me._CatalogIconImageUrl 
     End Get 
     Set(ByVal value As String) 
      Me._CatalogIconImageUrl = value 
     End Set 
    End Property 


    ''' <summary> 
    ''' Gives us some functionality of a full web part without actually extending WebPart. (Me is only an IWebPart, not a true WebPart) 
    ''' </summary> 
    ''' <remarks></remarks> 
    Public ReadOnly Property WebPart() As WebPart 
     Get 
      Dim wpm As WebPartManager = WebPartManager.GetCurrentWebPartManager(Me.Page) 
      Return wpm.WebParts(Me.ID) 
     End Get 
    End Property 

#End Region 


    Public Overridable ReadOnly Property Verbs As System.Web.UI.WebControls.WebParts.WebPartVerbCollection Implements System.Web.UI.WebControls.WebParts.IWebActionable.Verbs 
     Get 

      Dim minimizeVerb As WebPartVerb = New WebPartVerb(ID & "minimizeVerb", AddressOf VerbMinimize, "OnMinimizeClicked('" & Me.ID & "')") With {.Text = "Minimize", .Description = "Minimize this web part"} 
      Dim restoreVerb As WebPartVerb = New WebPartVerb(ID & "restoreVerb", AddressOf VerbRestore, "OnRestoreClicked('" & Me.ID & "')") With {.Text = "Restore", .Description = "Restore this web part"} 

      Dim collection As Collection = New Collection 
      Dim returnValue As New WebPartVerbCollection 

      If Me.WebPart.ChromeState = PartChromeState.Minimized Then 
       collection.Add(restoreVerb) 
       returnValue = New WebPartVerbCollection(collection) 
      End If 
      If Me.WebPart.ChromeState = PartChromeState.Normal Then 
       collection.Add(minimizeVerb) 
       returnValue = New WebPartVerbCollection(collection) 
      End If 
      Return returnValue 
     End Get 
    End Property 

    Protected Shared Sub VerbRestore(ByVal sender As Object, ByVal e As WebPartEventArgs) 

     e.WebPart.ChromeState = PartChromeState.Normal 

    End Sub 

    Protected Shared Sub VerbMinimize(ByVal sender As Object, ByVal e As WebPartEventArgs) 

     e.WebPart.ChromeState = PartChromeState.Minimized 

    End Sub 
End Class 

然後我就在通過上述所謂的客戶端腳本如下:

// fired when user clicks restore on any web part 
    function OnRestoreClicked(webPartID) { 
     switch (webPartID) { 
      case 'ucMyTimekeeping': 
       // don't need to refresh any update panels in this case, because none of the controls in timekeeping are server-side 
       // (unlike files and docs, which have server-side tab containers and tabs) 
       dbLoadTime(); 
       break; 
      case 'ucMyDocuments': 

       //wait a few milliseconds for the server to un-hide the web part (see icBaseWebPartControl.vb) 
       //hpTODO: There has GOT to be a better way to do this... maybe autopostback on the restore link, but not sure how to go about that. 
       setTimeout(function() { 
        HpDocs.UpdatePanel(); 
        dbLoadDocs(); 
       }, 200); 
       break; 
      case 'ucMyFiles': 
       // hpTODO: same as for ucMyDocuments 
       setTimeout(function() { 
        HpFiles.UpdatePanel(); 
        dbLoadFiles(); 
       }, 200); 
       break; 
      default: 
       __doPostBack(webPartID, ''); 

     } 
     //   return false; 
    }; 

而且這裏是在UpdatePanel()函數的樣子:

// do partial postback on the update panel inside the My Files .ascx 
HpFiles.UpdatePanel = function() { 
    var myFiles = $("[id$='_upMyFiles']").attr('id'); 
    __doPostBack(myFiles); 
};