2013-04-09 38 views
0

我目前正在使用該遠程WebDataMenus動態添加項目;通過它我可以從窗體訪問,甚至可以觸發事件來執行一些定義的函數或邏輯。WebDataMenu的菜單項沒有事件在服務器上觸發

問題出現在我想通過ItemClick類型事件運行我的VB.NET代碼時,此事件無法正常工作;或者至少我不能讓它在服務器端工作(它不會觸發),但它通過JavaScript在客戶端很好。

值得一提的是,當我點擊我的菜單中的任何項目來運行時,我的VB.NET代碼給了我一個JavaScript錯誤'__doPostBack' is undefined - 我如何才能做到這一點,並從我的VB.NET代碼運行事件? PS:爲了使它現在能夠正常工作,我通過在ScriptManager上設置了EnablePageMethods = True屬性,通過指令PageMethods.WebDataMenu2_ItemClick (eventArgs.getItem(). Get_key());從JavaScript運行VB.NET函數。

但是,這不允許我使用我運行的方法中的其他控件,它會在每個控件中給我一個初始化錯誤。

  1. 我添加菜單和菜單項。

    -Code HTML

    <ig:webdatamenu ID="WebDataMenu2" runat="server" Font-Bold="False" 
         Font-Names="Arial Narrow" Font-Overline="False" Font-Size="10px" 
         Width="100%" > 
        <GroupSettings Orientation="Horizontal" /> 
        <ClientEvents ItemClick="WebDataMenu2_ItemClick" /> 
    </ig:webdatamenu> 
    

    添加項目-VB.NET守則菜單

    ut = New Infragistics.Web.UI.NavigationControls.DataMenuItem 
    ut.Text = ds.Tables(0).Rows(0).Item("x1").ToString() 
    ut.ToolTip = ds.Tables(0).Rows(0).Item("x1").ToString() 
    ut.Key = "0" 
    ut.ImageUrl = "~/ImagesToolBar/employee20.gif" 
    WebDataMenu2.Items.Add(ut) 
    
    
    ut = New Infragistics.Web.UI.NavigationControls.DataMenuItem 
    ut.Text = ds.Tables(0).Rows(0).Item("x2").ToString() 
    ut.ToolTip = ds.Tables(0).Rows(0).Item("x2").ToString() 
    ut.Key = "1" 
    ut.ImageUrl = "~/ImagesToolBar/timecard20.gif" 
    WebDataMenu2.Items.Add(ut) 
    
  2. 目前我添加了一個客戶端事件

    function WebDataMenu2_ItemClick(sender, eventArgs) 
    { 
        if (eventArgs.getItem().get_key() != '') { 
         alert('test2: ' + eventArgs.getItem().get_key()); 
        } 
    } 
    
  3. VB.NET代碼在這裏觸發事件在VB.NET中(這裏不能執行此方法)

    Protected Sub WebDataMenu2_ItemClick1(sender As Object, e As Infragistics.Web.UI.NavigationControls.DataMenuItemEventArgs) Handles WebDataMenu2.ItemClick 
    
    
        nodotext = e 
    
        Select Case nodotext 
         Case "0" 
          Session("IT") = 2 
          Session("I") = 1 
          ident = Session("I") 
         Case "1" 
          Session("IT") = 2 
          Session("I") = 800 
          ident = Session("I") 
         Case "2" 
          Session("IT") = 2 
          Session("I") = 5 
          ident = Session("I") 
         Case "3" 
          Session("IT") = 2 
          Session("I") = 6 
          ident = Session("I") 
         Case "7" 
          Session("IT") = 2 
          Session("I") = 39 
          ident = Session("I") 
         Case "8" 
          Session("IT") = 2 
          Session("I") = 80 
          ident = Session("I") 
         Case "4" 
          Session("IT") = 2 
          Session("I") = 100 
          Session("RI") = 101 
         Case Else 
        End Select 
    
        Inicio() 
    End Sub 
    

回答

0

我使用你提供的代碼測試了這一個簡單的示例中,它按預期工作對我來說。關於__doPostBack沒有被定義的錯誤會阻止服務器端事件被觸發,因爲這是asp.net做回發的方式。

我會建議您檢查生成的HTML文件,以驗證該事件定義:

function __doPostBack(eventTarget, eventArgument) { 
    if (!theForm.onsubmit || (theForm.onsubmit() != false)) { 
     theForm.__EVENTTARGET.value = eventTarget; 
     theForm.__EVENTARGUMENT.value = eventArgument; 
     theForm.submit(); 
    } 
} 

如果該事件被定義支票無效的HTML這裏也許你缺少結束標記或者你有導致問題的頁面上的其他無效腳本。

相關問題