2013-04-09 35 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这里也许你缺少结束标记或者你有导致问题的页面上的其他无效脚本。

相关问题