我正在尝试对SharePoint 2010网站进行改进,并且在调用PageMethod时遇到了困难。这是我试图执行的脚本:
<script type="text/javascript">
function BindingTitle() {
alert("number one");
PageMethods.BindTitle(OnSucceeded, OnFailed);
alert("number two");
}
function OnSucceeded(result, userContext, methodName) {
alert("it worked!");
}
function OnFailed(error, userContext, methodName) {
alert("it didn't work!");
alert(error);
}
</script>
与脚本绑定的控件位于表格中,但为了简洁起见,它看起来像这样:
<table>
<thead>
<tr>
<th onclick="BindingTitle()"> alsdjlfajlskdjfla</th> //this is the control
</tr>
</thead>
</table>
并且放在代码后面的Web方法如下所示:
[WebMethod()]
public static void BindTitle()
{
Console.WriteLine("things are happening");
}
脚本中的行“PageMethods.BindTitle(OnSucceeded,OnFailed)未执行。单击控件时,会显示”第一个“警告,但”二号“从不显示(当页面方法时)被注释掉了,确实如此)。我唯一能想到的就是脚本管理器的原因。它是在这个包的主页面中声明的,这是我不想改变的。但脚本manager用于很多不同的事情,我不熟悉web开发的复杂性,知道它如何影响我的页面。脚本管理器的定义如下:
<asp:ScriptManager id="ScriptManager" runat="server" EnablePageMethods="true" EnablePartialRendering="true" EnableScriptGlobalization="false" EnableScriptLocalization="true" />
有没有办法可以在我的页面上禁用这个脚本管理器,这样我可以声明自己的,更简单的一个?还应该注意,这是一个相当大的站点,有几个页面依赖于先前声明的脚本管理器。这些网站的大多数代码都非常混乱,并且是由不再为该公司工作的人编写的。我这样说只是为了澄清一些可能影响其他页面的更改在我可用的时间内是不可行的,因为在这样的更改之后需要进行大量的测试和调试。
如果我遗漏了任何东西,请告诉我!谢谢!
答案 0 :(得分:1)
我已经尝试过你的代码了,它运行得很好。但是,当我将ScriptManagers
EnablePageMethods
属性更改为false
时,它会按照您的描述开始运行,即它执行第一个警报并停在那里。确保代码中的任何位置都未将该属性设置为false。
答案 1 :(得分:0)
我上周遇到了这个问题,我在论坛上找不到的任何东西都解决了这个问题。我已经设置了一个新的Web应用程序(来自VS模板),然后将几个页面复制到项目中。有些页面使用了PageMethods。这些页面都在旧项目中工作。但是,调用PageMethods的jscript代码在新项目中不起作用。 jscript被击中了,但它的表现就像PageMethod没被击中。我在PageMethod代码中设置了断点,它从未被命中。 (我在旧项目中验证了断点确实达到了。)回报也击中了&#34;成功&#34; jscript方法,但没有返回任何其他内容。
我最终发现新模板在Global.asax.cs文件中有几个我无法识别的调用。
// Code that runs on application startup
//RouteConfig.RegisterRoutes(RouteTable.Routes);
//BundleConfig.RegisterBundles(BundleTable.Bundles);
注释掉RouteConfig和BundleConfig调用允许PageMethod调用正常工作。我不确定这两个电话是做什么的,但我现在正在工作。
只是想分享一下,以防其他人遇到问题。