0

我目前正在使用该遥控器WebDataMenus来动态添加项目;通过它我可以从表单访问,甚至触发事件以执行定义的某些功能或逻辑。

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

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

PS:为了让它现在工作,我PageMethods.WebDataMenu2_ItemClick (eventArgs.getItem (). Get_key ());通过EnablePageMethods = TrueScriptManager.

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

  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
    
4

1 回答 1

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,其中您可能缺少结束标记,或者您的页面上可能有其他导致问题的无效脚本。

于 2013-04-12T01:51:08.890 回答