你能从同一个UserControls Javascript调用一个UserControl服务器函数吗

Can you call a UserControl Server Function from the same UserControls Javascript?

本文关键字:一个 UserControl 服务器 函数 同一个 UserControls 调用 Javascript      更新时间:2023-09-26

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

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

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

 public partial class UserControls_MyControl : UserControl
 {
      public string ExecuteThis(string someValue)
      {
          return someValue;
      }
 }

我想使用JavaScript从用户控制客户端调用ExecuteThis方法。我知道,如果是来自父页面的调用,使用其他机制,这是可能的;PageMethods。但是,当客户端和服务器代码都位于用户控件中时,如何实现这一点呢。

我看到了一些建议使用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"