2014-09-19 68 views
0

我不確定這個問題是否已經發布,我檢查了建議的SO鏈接,但沒有一個看起來與這個問題完全相關。所以如果有人認爲這是一個潛在的重複,請張貼建議答案的鏈接,原諒這篇文章。你可以從相同的UserControls Javascript中調用UserControl服務器功能嗎?

可能有不止一種方法來處理我的問題,但爲了簡潔起見,我有一個用戶控件,我想使用JavaScript或JQuery調用其相應的服務器端方法。

例如,說我是有我的用戶控制一些服務器端代碼,如:

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

我想打電話給該用戶的ExecuteThis方法使用JavaScript控制客戶端。我知道這是可能的,如果這是來自父母頁面使用其他機制的呼叫; 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回調綁定到用戶控制方法?或者甚至有可能?還是有一些更優雅的做法呢?

回答

1

您必須在頁面中使用標記爲WebMethod的用戶控件的方法,然後該方法纔會調用您的用戶控件方法。

在你的頁面:

[WebMethod] 
public static string ExecuteThis(string somevalue) 
{ 
    return userCtrl.ExecuteThis(somevalue); 
} 

在你的Ajax調用:

url: "/MyPage.aspx/ExecuteThis" 
+1

由於茲羅提,這就是答案!我花了一分鐘才弄清楚你提出的解決方案是什麼,但我現在明白了。儘管我「認爲」Web方法必須標記爲「靜態」才能起作用? – Mark 2014-09-19 21:07:34

+0

其實我不相信它會起作用,因爲WebMethods由於它們是靜態的而不能訪問頁面。但是,您可以將邏輯移至頁面,也可以創建Web服務或Web API,但我假設您想從客戶端腳本以某種方式實際操縱用戶控件? – pln 2014-09-19 22:06:55

相關問題