您可以从相同的UserControls Javascript调用UserControls服务器函数吗?

您可以从相同的UserControls Javascript调用UserControls服务器函数吗?,javascript,jquery,ajax,web-services,user-controls,Javascript,Jquery,Ajax,Web Services,User Controls,我不确定这个问题是否已经发布,我已经检查了建议的SO链接,但似乎没有一个与这个问题完全相关。因此,如果有人认为这是一个潜在的重复,请张贴建议答案的链接,并原谅这篇文章 解决问题的方法可能不止一种,但为了简单起见,我有一个用户控件,我想使用JavaScript或JQuery调用它相应的服务器端方法 例如,假设我的用户控件有一些服务器端代码,例如: public partial class UserControls_MyControl : UserControl { public s

我不确定这个问题是否已经发布,我已经检查了建议的SO链接,但似乎没有一个与这个问题完全相关。因此,如果有人认为这是一个潜在的重复,请张贴建议答案的链接,并原谅这篇文章

解决问题的方法可能不止一种,但为了简单起见,我有一个用户控件,我想使用JavaScript或JQuery调用它相应的服务器端方法

例如,假设我的用户控件有一些服务器端代码,例如:

 public partial class UserControls_MyControl : UserControl
 {
      public string ExecuteThis(string someValue)
      {
          return someValue;
      }
 }
我想使用JavaScript从用户控件客户端调用ExecuteThis方法。我知道这是可能的,如果它是一个调用从父页面使用其他机制;页面方法。但是,当客户机和服务器代码都驻留在用户控件中时,如何实现这一点呢

我读过一些文章和参考文章,建议使用WebService代理,我尝试过使用AJAX从用户控件客户端脚本调用WebService,并取得了一些成功

function MakeWebServiceCall()
{
     $.ajax({
         type: "POST",
         contentType: "application/json; charset=utf-8",
         url: "/WebServices/MyService.asmx/SomeMethod",
         data: "{}",
         dataType: "json",
         success: function (msg) {
             alert(msg.d);
         },
         error: function(error)
         {
             alert(error.responseText);
         }
     });
}

但是如何将WebService回调与用户控件方法联系起来呢?或者甚至有可能吗?或者有更优雅的方法吗?

您必须在页面中有一个方法,该方法使用标记为WebMethod的用户控件,然后该方法将调用您的用户控件方法

在您的页面中:

[WebMethod]
public static string ExecuteThis(string somevalue)
{
   return userCtrl.ExecuteThis(somevalue);
}
在ajax调用中:

url: "/MyPage.aspx/ExecuteThis"

谢谢,这就是答案!我花了一分钟才弄明白你提出的解决方案,但我现在明白了。虽然我“认为”Web方法必须标记为“静态”才能工作,但实际上我不相信它会工作,因为Web方法是静态的,所以根本无法访问页面。但是,您可以将逻辑移到页面上,或者创建一个web服务或web api,但我假设您实际上希望以某种方式从客户端脚本操纵用户控件?