2011-03-16 63 views
6

有沒有什麼辦法可以使用Ajax我使用JQuery爲此)與asp.net webforms無需通過頁面生命週期運行?如何使用asp.net webforms

+0

你爲什麼要這麼做? – BentOnCoding 2011-03-16 21:27:45

+1

因爲瀏覽頁面生命週期是毫無意義的,當你需要的是一些數據檢索或通過AJAX執行的操作。 – 2011-03-16 22:24:47

回答

7

如果你使用jQuery的,正如你所說,你可以use jQuery to call Page Methods directly,而不會產生MicrosoftAjax.js和服務代理的開銷,它產生使PageMethods.MethodName()語法。

鑑於PageName.aspx靜態[WebMethod]裝飾方法,這就是所謂的MethodName,這是你如何可以調用它的客戶端的例子:

$.ajax({ 
    type: "POST", 
    url: "PageName.aspx/MethodName", 
    data: "{}", 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    success: function(msg) { 
    // Do something interesting with msg.d here. 
    } 
}); 
1

確實有辦法。退房this answer。這個特殊的例子在後端使用MVC,但你也可以用基本的ASP.NET來完成 - 只需要調用PageMethods/WebMethods via AJAX即可。

其中一個關鍵是聲明一個帶有WebMethod屬性的靜態方法。

+1

您也可以考慮使用UpdatePanels,但缺點是儘管最終用戶看起來像只有一部分頁面正在刷新,但您仍然回發整個ViewState並遍歷整個頁面生命週期服務器。呸。 – Kon 2011-03-16 21:32:43

+0

或HttpHandler ... – 2011-03-16 21:36:44

+0

如果我這樣做,我需要scriptmanager嗎? – chobo 2011-03-16 23:47:09

7

根據您要做的事情,您可以使用Web方法或Http處理程序。 Web方法可能更容易一些,並且只是用[WebMethod]屬性裝飾的服務器端靜態函數。

下面是一個例子:

C#:

[WebMethod] 
public static string SayHello(string name) 
{ 
    return "Hello " + name; 
} 

ASPX:

<asp:ScriptManager ID="sm" EnablePageMethods="true" runat="server"/> 

<script type="text/javascript"> 
    #(function() 
    { 
     $(".hellobutton").click(function() 
     { 
      PageMethods.SayHello("Name", function(result) 
      { 
       alert(result); 
      }); 
     }); 
    } 
</script> 

<input type="button" class="hellobutton" value="Say Hello" /> 
+0

代碼在回發事件後無法使用! – Vijayaraghavan 2016-09-06 11:07:39

1

您可以使用頁面方法,因爲他們是所謂。

它們本質上是Page上的方法,但聲明爲靜態方法。

public class MyPage : System.Web.UI.Page 
{ 
    [WebMethod] 
    public static string Reverse(string message) { 
     return message.Reverse(); 
    } 
} 

然後,他們可以使用這樣的客戶端腳本:

function reverseMyString(message) { 
    // Magically generated code appears 
    PageMethods.SendForm(message, OnSucceeded, OnFailed); 
} 

function OnSucceeded(result) { alert(result) } 
function OnFailed(error) { alert(error.get_message()) } 

他們是相當整潔相比,ASMX Web服務,因爲他們可以留一個特定的頁面構建了相同的Web窗體的功能內。