2012-02-26 101 views
0

我需要從javscript函數調用服務器端函數。使用隱藏按鈕從JS調用服務器端函數

盡我所知,這是不可能的,因爲JS在客戶端上運行,因此只能調用一個靜態函數(不在同一個上下文中)。我已經讀了隱藏的按鈕方法,隱藏一個asp服務器端的按鈕,然後點擊它以編程方式從JS,因此使回發,然後調用事件處理程序。

有關該方法的幾個問題 -

  1. 有多好這個方法?我的意思是,這種方法被廣泛使用或被認爲是原始的和舊的?

  2. 這種方法的缺點是什麼?

  3. 我讀過的關於這種方法的另一件事是,如果你使用這種方法,這意味着整體頁面邏輯設計有些問題。這在某種程度上是真的嗎?有沒有更好的方法來解決這個問題?

由於這樣做是利用PageMethods提前

+1

試過使用AJAX?您可以使用JS代碼調用服務器組件。 – 2012-02-26 15:51:31

+0

我可以使用Ajax調用非靜態函數嗎?怎麼樣? – 2012-02-26 16:11:57

回答

1

您可以通過手動調用__doPostBack javascript函數手動執行回發。 看看this其他職位。

+0

是否有異步接近? – 2012-02-26 16:15:22

+0

您將在onload事件中調用__doPostBack javascript函數(這是您的linkbutton的函數),並且按下按鈕並正常執行回發,並且不會影響佈局,因爲您問 – Mhmd 2012-02-26 16:22:47

+0

這種方法被認爲是更好的隱藏的按鈕?會有什麼區別? – 2012-02-26 16:36:14

0

一個體面的方式。您可以在後面的代碼中聲明一個具有[WebMethod]屬性的靜態方法。這意味着您可以通過來自客戶端的ajax請求來訪問它。就像這樣:

[WebMethod] 
public static string GetDate() 
{ 
    return DateTime.Now.ToShortDateString(); 
} 

你將不得不使用System.Web.Services獲取屬性。

從客戶端,你可以做這樣的事情,用jQuery:

$.ajax({ 
    type: "POST", 
    url: "YourPage.aspx/GetDate()", 
    data: "{}", 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    success: function(data) { 
     alert(data.d); 
    } 
}); 

注意到,ASP.net將增加一個.d對象無論你發回。

AFAIK這是在客戶端和代碼隱藏之間進行通信而不觸發回發的首選方式。這也很清楚發生了什麼事情。

使用一個隱藏按鈕,通過在按鈕上調用click()觸發的回發,更加「神奇」,並且根本不清楚發生了什麼。與__doPostback一樣。

+0

問題是我不想使用靜態方法(因爲我需要能夠與頁面中的對象進行通信) – 2012-02-26 16:15:11

+1

@SkipperGeffen然後不,沒有好方法。 ASP.Net正試圖將狀態保持在無狀態協議中。如果您僅使用ASP控件,此功能效果最佳。如果你使用javascript,那麼你最好通過ajax和webmethods進行通信。 ASP.Net中用於執行異步回傳的解決方案是使用UpdatePanels。儘管如此,他們發送的信息多於經常需要的信息。 – 2012-02-26 16:20:51

相關問題