小编典典

asp.net ScriptManager PageMethods未定义

ajax

我想从JS调用静态服务器端方法,所以我决定在我的网站上使用ScriptManager控件。所以我有一个具有这样结构的母版页:

<%@ Master Language="C#" AutoEventWireup="true" CodeBehind="TopLevelMasterPage.Master.cs"
    Inherits="Likedrive.MasterPages.TopLevelMasterPage" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:fb="http://ogp.me/ns/fb#">

<head runat="server">
    <title></title>
        <script type="text/javascript">
            function getGiftFileUrl() {
                function OnSuccess(response) {
                    alert(response);
                }
                function OnError(error) {
                    alert(error);
                }

                PageMethods.GetGiftFileUrl("hero", 1024, 768, OnSuccess, OnError);
            }

            getGiftFileUrl();

        </script>
    </asp:ContentPlaceHolder>
</head>
<body>
    <form id="form1" runat="server">
    <asp:ScriptManager ID="ScriptManagerMain"
            runat="server"
            EnablePageMethods="true" 
            ScriptMode="Release" 
            LoadScriptsBeforeUI="true">
    </asp:ScriptManager>
    <asp:ContentPlaceHolder ID="MainContent" runat="server"> 
    </asp:ContentPlaceHolder>
    </form>
</body>
</html>

但是,当页面正在加载时,我有一个JS异常-PageMethods未定义。我以为该对象将被隐式创建,因此我可以在我的JavaScript中使用它。


阅读 300

收藏
2020-07-26

共1个答案

小编典典

我已经意识到为什么未找到PageMethod对象的原因,因为ScriptManager组件位于使用PageMethod的脚本的旁边,因此在渲染页面并执行脚本时,目前没有PageMethod。所以当页面上的所有脚本都准备好使用时,我需要在按钮单击或窗口加载事件上调用getGiftFileUrl()。

2020-07-26