2011-06-16 140 views
2

我後面的aspx文件的文件中的代碼看起來像這樣的時候:訪問頁面的方法訪問頁面與頁面方法

public partial class Pages_MyPage : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
    ..... 
    } 

    protected int MyMethod() 
    { 
    ..... 
    } 

    [WebMethod] 
    public static int MyPageMethod() 
    { 
    int x = MyMethod(); 
    return x; 
    } 

} 

當我送一個AJAX POST到MyPageMethod,我可以」訪問MyMethod。解決這個問題的方法是什麼。

感謝您的建議。

回答

1

的WebMethods是static方法,因爲他們沒有得到一個完整的Page

他們只能調用其他方法static

+0

好,非常感謝,這使得它很容易。 – frenchie 2011-06-16 20:35:13

2

MyMethod還需要是靜態的。

想想你想在這裏做 -

MyMethod屬於類的特定實例

MyPageMethod屬於本身。

如果裏面MyPageMethod你運行的代碼,你怎麼可能知道如何調用該對象的其他一些實例方法。方法可能不存在於代碼中的那一點。

如果你正試圖從的JavaScript變異頁面的數據的某些部分,你有頁如何asp.net工作的深刻誤解。

在點javascript正在瀏覽器中運行,您的頁面對象不見了。服務器完成了頁面加載並丟棄它。在接下來的後回它會創建一個新的實例,並通過頁面生命週期再次運行。

如果您需要訪問頁面的水平狀態,你必須把它保存在一個地方,那就是後背上,比如Session對象之間可以接受的,與System.Web.HttpContext.Current

+0

謝謝;我沒有從JavaScript中改變頁面,我只是寫了一個Ajax回調。我將添加他靜態關鍵字,使其工作。 – frenchie 2011-06-16 20:34:49

+0

事實上,PageMethods是靜態的,完全繞過了頁面生命週期。實際上沒有任何頁面生命週期,因爲Page類的實例從未被創建。 – 2011-06-16 21:14:16