使用jQuery AJAX在控制代码隐藏而不是页面代码隐藏中调用ASP.NET函数

我有一个用户控件,我正在创建在jQuery中使用一些AJAX。

我需要在我的控件的代码隐藏中调用一个函数,但我在网上找到的每个例子都是这样的:

$("input").click(function() { $.ajax({ type: "POST", url: "Default.aspx/GetResult", data: "{}", contentType: "application/json; charset=utf-8", dataType: "json", success: function(result) { //do something } }); }); 

如果我在Default.aspx页面中有方法,这可以正常工作。 但我不希望在那里有function,我需要在我的控件的代码隐藏中的function。 如何修改url属性以调用正确的函数?

我试过了:

 url: "GetResult" 

但那没用。

你不能…… WebMethods必须在WebServices或Pages中,它们不能在UserControls中。

想想看问题更清楚一点的另一种方式…… UserControl的URL是什么? 由于无法访问它们,因此无法直接获取该方法。 您可以尝试另一种方式,也许是您页面中的代理方法?

处理此问题的方法是在页面中使用webmethod,然后将值直接传递给控件中具有相同签名的控件方法 – 没有其他方法可以执行此操作。

换句话说,所有页面方法都会调用usercontrol方法,因此它非常小。 如果您具有多个子控件的相同签名,则可以传递参数以告知页面方法调用/使用哪个。

编辑:每个请求(非常非常简单的例子)。 您可以找到将更复杂类型传递给服务器端方法的其他示例。 例如,请参阅我的答案: C#UserControl上的Jquery .ajax异步回发

示例:页面方法:记下“静态”部分。

 [WebMethod] public static string GetServerTimeString() { return MyNamespace.UserControls.Menu.ucHelloWorld(); } 

用户控制方法:

 public static string ucHelloWorld() { return "howdy from myUserControl.cs at: " + DateTime.Now.ToString(); } 

客户端ajax通过jquery:

 $(document).ready(function() { /***************************************/ function testLoadTime(jdata) { $("#timeResult").text(jdata); }; $("#testTimeServerButton").click(function() { //alert("beep"); $.ajax({ type: "POST", contentType: "application/json; charset=utf-8", data: "{}", dataFilter: function(data) { var msg; if (typeof (JSON) !== 'undefined' && typeof (JSON.parse) === 'function') msg = JSON.parse(data); else msg = eval('(' + data + ')'); if (msg.hasOwnProperty('d')) return msg.d; else return msg; }, url: "MyPage.aspx/GetServerTimeString", success: function(msg) { testLoadTime(msg); } }); }); }); 

注意:dataFilter:function(data)… ajax的一部分是这样的,它可以在不更改客户端代码的情况下使用2.0和3.5 asp.net ajax。