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