【问题标题】:Page Methods throwing Undefined页面方法抛出未定义
【发布时间】:2010-12-01 14:09:06
【问题描述】:

我正在尝试使用页面方法来调用函数,但出现“PageMethods 未定义”错误。我之前在使用 C# 而不是 VB 时使用过它们,所以我想知道我的语法是否错误,因为我能找到的所有示例都是 C#。 我也想知道是不是因为我的脚本管理器在母版页上?

我到处都读到过这个错误,但我所拥有的一切似乎都是正确的!

谁能指出我做错了什么?

谢谢!

我的代码:

母版页的一部分

<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePartialRendering="true"  EnablePageMethods="true" >
</asp:ScriptManager>
<div id="header">~~~~~

内容页面 HTML

  <asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server">
<script type="text/javascript">
        function selectZones(commaSeparatedList){
            PageMethods.Zones(commaSeparatedList);
        }
    </script>
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="navigationPlaceHolder" runat="server">
</asp:Content>
<asp:Content ID="Content3" ContentPlaceHolderID="ContentBodyPlaceHolder" runat="server">

<a href='' onclick='selectZones("blah,blah,blah"); return false;'>click here</a>
</asp:Content>
<asp:Content ID="Content4" ContentPlaceHolderID="functionsMenuPlaceHolder" runat="server">
</asp:Content>

后面的内容页面代码

    Imports System.Web.Services

Public Class TestClass
    Inherits BaseClass

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

    End Sub

    <WebMethod()>
    Protected Shared Sub Zones(ByVal zones As String)
        HttpContext.Current.Response.Write("test = " & zones)
    End Sub
End Class

【问题讨论】:

  • 尝试将 ScriptManager 放在内容页面的 .aspx 中。运气好吗?
  • Hmm.. 下一步调试:创建全新的 .aspx 页面(没有母版页)并将 ScriptManager 和 PageMethod 放在那里。它有效吗?如您所见,我正在尝试验证问题在于 ScriptManager 是否位于母版页中。
  • 顺便说一句,当您发表评论时,通过输入@username 来提醒该人@Shadow 就足够了,否则除非该人在收藏夹中有问题,否则他/她将不会收到任何通知.
  • @Shadow 我解决了。看来我的方法需要公开而不是保护。我在吠叫,但树错了
  • @Bex 感谢分享.... 仍然觉得整个 PageMethods 未定义很奇怪.. 更有可能的行为是仅针对未公开的特定页面方法未定义。

标签: c# javascript asp.net vb.net


【解决方案1】:

我相信您在脚本管理器中的脚本完成运行之前运行“selectZones”方法的问题。我建议您尝试将 call 放入 document ready 或 event 中,看看此时 call 是否有效。脚本会在客户端浏览器看到它们时运行,如果像脚本管理器一样下载,页面后面的其他脚本将首先运行。

【讨论】:

  • 我该怎么做?你能举个例子吗?
【解决方案2】:

终于搞定了。与脚本管理器或类似的东西无关。

我在后面的代码中的方法需要是public,所以现在如下:

 <WebMethod()> 
Public Shared Sub Zones(ByVal zones As String) 
    HttpContext.Current.Response.Write("test = " & zones) 
End Sub 

没有意识到这是必要的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-02-23
    • 2013-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多