2010-08-02 55 views
4

我有一个用户控件,我创建的是在jQuery中使用一些AJAX。使用jQuery AJAX在控制代码隐藏而不是页面代码隐藏中调用ASP.NET函数

我需要调用在我的控制的代码隐藏的功能,但我在网上找到的每一个例子是这样的:

$("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页的方法。但我不想在那里有这个功能,我需要在我的控制代码背后的功能。我如何修改url属性来调用正确的函数?

我想:

url: "GetResult" 

,但没有奏效。

回答

5

您不能... WebMethods必须位于WebServices或Pages中,它们不能位于UserControls内部。

想想看另一种方式来看问题有点清楚...什么是UserControl的URL?由于无法访问它们,因此无法直接访问该方法。你可以尝试另一种方式,或许在你的页面中使用代理方法?

7

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

换句话说,所有的页面方法都会调用usercontrol方法,所以它确实很小。如果您对多个子控件具有相同的签名,则可以传递一个参数来告诉页面方法调用/使用哪一个。

编辑:每个请求(非常非常简单的例子)。您可以找到其他更复杂的类型传递给服务器端方法的示例。例如在此处查看我的答案:Jquery .ajax async postback on C# UserControl

示例: Page method:请注意“静态”部分。

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

用户控制方法:

$(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:通过jQuery

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

客户端AJAX功能(数据)...的AJAX的一部分,使得其适用于2.0和3.5 asp.net ajax而不需要更改客户端代码。

+0

你有一个如何做到这一点的小例子? – Steven 2010-08-02 23:52:22

+0

谢谢,它适合我。 – 2015-11-26 01:06:15