WebDataMenu的MenusItems在服务器上没有事件触发

本文关键字:事件 MenusItems 服务器 WebDataMenu | 更新日期: 2023-09-27 18:08:03

我目前正在使用远程WebDataMenus动态添加项目;通过它,我可以访问表单,甚至触发事件来执行一些函数或逻辑定义。

当我想运行我的VB时,问题出现了。. NET代码通过ItemClick类型事件,此事件不能正常工作;或者至少我不能让它在服务器端工作(它不触发),但它通过JavaScript在客户端工作得很好。

值得一提的是,当我点击菜单中的任何项来运行时,我的VB。. NET代码给了我一个JavaScript错误'__doPostBack' is undefined -我如何能使这项工作,并从我的VB运行事件。NET代码?

PS:为了使它现在工作,我正在运行VB。通过在ScriptManager上设置EnablePageMethods = True属性,从JavaScript通过指令PageMethods.WebDataMenu2_ItemClick (eventArgs.getItem (). Get_key ());调用。

然而,这不允许我从我运行的方法中使用我的其他控件,它在每个控件中给我一个初始化错误。

  1. 添加菜单和菜单项。

    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
    

WebDataMenu的MenusItems在服务器上没有事件触发

我使用您提供的代码在一个简单的示例中测试了这一点,它按预期工作。关于__doPostBack未定义的错误将阻止服务器端事件触发,因为这是asp.net进行post back的方式。

我建议您检查生成的html文件,以验证是否定义了此事件:

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

如果事件被定义,检查无效的html,其中可能你错过了一个结束标签,或者可能你在页面上有其他无效的脚本,导致问题。