2014-09-04 130 views
0

我有以下的代碼片段。我只能以非靜態方式訪問PbcTreeView,所以我在Page_Load期間調用它。但是,setTreeView()方法無法訪問對象b,因此無法調用buildTreeView()方法。 (根據WebMethod規則,setTreeView()必須是靜態的,buildTreeView不能是靜態的,因爲它使用了TreeView)。我怎麼能得到它做類似b.buildTreeView(),我在方法中?如何使用靜態方法調用非靜態方法(使用WebControl)?

感謝

protected void Page_Load(object sender, EventArgs e) 
    { 
     BuildPbcTree b = new BuildPbcTree(PbcTreeView); 
    } 

    [WebMethod] 
    public static void setTreeView() 
    { 
     b.buildTreeView(); //how do I do this?? 
    } 

    public class BuildTree 
    { 
     TreeView Tree; 
     public BuildTree(TreeView t) 
     { 
      Tree = t; 
     } 
     public void buildTreeView() {...//implementation} 
    } 
+5

你不能那樣做。 AJAX方法的要點是沒有頁面生命週期。 – SLaks 2014-09-04 20:10:35

+0

@SLaks謝謝,你會如何解決我想要做的事情? – 2014-09-04 20:32:10

+0

您必須將BuildPbcTree包裝在Singleton類中http://www.dotnetperls.com/singleton – 2014-09-04 20:43:06

回答

0

您可以在類的實例傳遞給靜態方法。例如,在您的Page_Load中:

SetTreeView(b); 

這假定您更改您的Web方法以接受BuildTree類。

+0

這不會幫助;他想修改他的頁面上呈現的控件。 – SLaks 2014-09-04 21:25:23

0

我假設PbcTreeView是你的頁面上的一些控件。

在這種情況下,您運氣不好。您無法在AJAX調用(網絡方法)期間修改服務器端控件。 AJAX調用的設計用法如下:

  1. 您可以使用JavaScript代碼調用Web方法。
  2. Web方法執行一些數據庫查找或計算並返回結果。
  3. 您的JavaScript代碼更新了用戶界面。

您正在嘗試更新中的用戶界面的網絡方法。這是行不通的。如果您需要這樣做,請使用UpdatePanel使用回發或異步回發。