2010-08-02 97 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