2009-10-01 49 views
2

这可能是,但我想实现使用AJAX C#和asp.net这里一个简单的Web方法非常noobish问题是代码:C#AJAX Web方法 - 我做错了什么?

C#代码背后:

using System.Web.Services; 

public partial class Controls_LeftNavigation : System.Web.UI.UserControl 
{ 
    [WebMethod] 
    public static string MyMethod() 
    { 
     return "Hello"; 
    } 
} 

Asp.net页面:

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

<script type="text/javascript"> 
      function pageLoad() { 
       var acc = $find('<%= Accordion1.ClientID %>_AccordionExtender'); 
       acc.add_selectedIndexChanging(ClickHandler); 
      } 
      function ClickHandler() { 
       // Do whatever you want. 
       alert('Something is happening!'); 
       alert(PageMethods.MyMethod()); 
      } 
</script> 

当导航按钮被点击时,它显示“发生了什么事!”消息框但不显示页面方法警报。

我正在使用ASP AJAX工具包accordion,这就是为什么页面加载事件将click处理事件添加到该控件。

+0

如果你在webmethod中放置了一个断点,它会被击中? – tpower 2009-10-01 15:53:29

回答

2

不支持用户控件的PageMethods。

+1

进一步的调查表明,你很正确,我就像第一次想到的那样,只是一个小菜一碟:) ty – Morgeh 2009-10-01 20:38:49

2

页方法是异步的,你必须提供一个onSuccess处理,像这样:

function OnSuccess(result) { 
    alert(result); 
} 

function ClickHandler() { 
    PageMethods.MyMethod(OnSuccess); 
} 

您还需要防止SelectedIndexChanging事件从做回发,否则页面将无法处理返回结果。

+0

您能否提供更多的细节? – Morgeh 2009-10-01 15:42:08

+0

仍然没有快乐。不知道问题是什么,因为没有错误或警告。 – Morgeh 2009-10-01 15:50:14

+0

我更新了答案,以包含适用于我的代码。 – tpower 2009-10-01 15:50:57