ASP.NET中的Pagemethods

14

我的Pagemethod实现在Chrome浏览器中无法正常工作。 我使用的是在VS 2008中开发的ASP.NET 3.5 Web应用程序。

以下代码在chrome或safari中不起作用:

function FetchDataOnTabChange(ucName)
{ 
    PageMethods.FetchData(ucName, OnSuccessFetchDataOnTabChange, OnErrorFetchDataOnTabChange);
}

function OnErrorFetchDataOnTabChange(error)
{   
   //Do something
}

function OnSuccessFetchDataOnTabChange(result)
{
   //Do something  
}

是的,在IE7及以上版本中运行效果更好,Mozilla表现正常,但在Chrome和Safari中失败了。对于最后一个问题,我不想发表评论。 - Chetan
如果你想得到答案,你需要发布一些代码。 - Geoff Appleford
你能提供你在JavaScript中使用的代码吗?在Chrome中也有一个开发者工具来调试JavaScript。ctrl + shift + j - Kris van der Mast
1个回答

40

按照以下步骤,这应该适用于所有浏览器:

  • 页面方法必须具有System.Web.Services.WebMethod属性。[WebMethod]
  • 页面方法必须为public。 [WebMethod] public ...
  • 页面方法必须是静态的。[WebMethod] public static ...
  • 页面方法必须在页面上定义(可以是内联或代码后台)。它不能在控件、主页面或基页中定义。
  • ASP.NET AJAX Script Manager必须启用EnablePageMethods。

这来自一个有效的应用程序。

aspx页面:

/* the script manager could also be in a master page with no issues */
<asp:ScriptManager ID="smMain" runat="server" EnablePageMethods="true" />
<script type="text/javascript">
    function GetDetails(Id) {
        PageMethods.GetDetails(doorId);
    }
</script>

后台代码:

[System.Web.Services.WebMethod]
public static void GetDetails(string Id)
{

}

我不理解这个问题: "页面方法不能在基本页面中定义"。你能解释一下为什么吗?因为我必须使用处理程序。 - donRumatta
不幸的是,我不知道技术原因“为什么”,但答案是因为MasterPage没有继承自System.Web.UI.Page,因此您不能调用PageMethods,因为从技术上讲它不是一个页面,而实际上是一个System.Web.UI.MasterPage。 - hardba11
1
不得不说,我认为这个答案已经过时了。请看我的问题:http://stackoverflow.com/questions/20554780/inconsistent-pagemethod-behavior-in-different-browsers。我按照你的步骤做了,但结果却参差不齐。 - LittleBobbyTables - Au Revoir
2
@ColoradoRockie,我认为您在说“......不能在控件、主页面或基础页面中定义”时是错误的。这是完全可能的。可以在任何从ASP.NET 'Page'类派生的类中定义您的“Page Methods”。当调用派生页面时,将注入该方法的脚本。 - James Poulose
1
真的厌倦了那些只是为了赚取声望而进行的垃圾编辑。或者在A-Sharabiani的情况下 - 明显是在努力获得他的复制编辑徽章。真的吗?“祝你好运:-)”正在削弱这篇8年前的帖子。 - hardba11
“无法在基础页面中定义”这一信息是不正确的。事实上,页面方法可以在基础页面类中定义。 - tibx

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接