【问题标题】:Calling Function in Codebehind of aspx from Javascript Throws Error在 JavaScript 的 aspx 代码隐藏中调用函数引发错误
【发布时间】:2017-01-20 21:03:00
【问题描述】:

一旦窗口完全显示,我正试图在我的 .aspx 页面的代码隐藏中调用一个函数。我尝试使用:

    <script type="text/javascript">
    $(document).ready(function () {
        PageMethods.CheckForPageChange();
    });
</script>

它会抛出以下错误:

0x800a1391 - JavaScript 运行时错误:“$”未定义

我能够让window.onload 显示一个警告框,所以我尝试像这样使用它:

    <script type="text/javascript">
    window.onload = function () {
        PageMethods.CheckForPageChange();
    }
</script>

但它会抛出错误“PageMethods is undefined”。

我在“表单”标签内有这个:

        <asp:ScriptManager runat="server" ID="ScriptManager1" EnablePageMethods="true"></asp:ScriptManager>

这在我的代码隐藏中:

    [WebMethod]
    public void CheckForPageChange()
    {
        throw new NotImplementedException();
    }

有人可以告诉我我在这里缺少什么吗?非常感谢任何帮助!

【问题讨论】:

标签: javascript c# jquery asp.net


【解决方案1】:

0x800a1391 - JavaScript 运行时错误:“$”未定义

确保 JQuery 已成功加载。

它抛出错误“PageMethods 未定义”。

1- 您必须将服务器端方法设置为静态方法,如下所示

[WebMethod]
public static void CheckForPageChange()
{
    throw new NotImplementedException();
}

2- 像这样调用服务器端方法

<script type="text/javascript">
function OnSuccess(response){
   //Do Stuff
}
function OnError(error){
   //Do Other Stuff
}
$(document).ready(function () {
    PageMethods.CheckForPageChange(OnSuccess, OnError);
});

3- 将您的脚本放在&lt;asp:ScriptManager&gt; 之外,放在单独的&lt;script&gt; 标记中

【讨论】:

    【解决方案2】:

    第一个错误的原因是你的aspx页面中没有包含jQuery。

    下一个错误是因为你没有runat="server"。尝试像这样修改您的ScriptManager

    <asp:ScriptManager ID="ScriptManagerMain"
            runat="server"
            EnablePageMethods="true" 
            ScriptMode="Release" 
            LoadScriptsBeforeUI="true">
    </asp:ScriptManager>
    

    【讨论】:

    • OP 有runat="server" in the ScriptManager` 调用。我认为您的意思是指出 LoadScriptsBeforeUI 属性。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-13
    相关资源
    最近更新 更多