2011-09-06 49 views
1

我試圖找出一種方法,可以從另一個ASPX代碼隱藏頁面中調用Web方法(位於aspx頁面後面的代碼中的公共靜態方法)。從ASPX代碼後面調用Web方法

這是第A.aspx

public partial class PageA : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
    // other code not relevant is here 
    } 

    [WebMethod(true)] 
    public static string GetStringInfo() 
    { 
     // do some stuff here to build my string 
     // return string 
    } 
} 

第B後面的代碼,我需要能夠()在頁面加載或一些其他事件來獲取信息調用GetStringInfo。 GetStringInfo()相當複雜,並且由於我不能控制的原因,無法將其移動到其他位置或目前進行重建。

如何從後面的其他頁面的代碼中使用上面的web方法?

我試過實例其他網頁(網頁B)的副本,如:

public partial class PageB : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     PageA page = new PageA(); 
     page.GetStringInfo();   
    } 
} 

這裏的問題是,因爲它是動態編譯的,我沒有一個簡單的命名空間引用和訪問。我嘗試添加一個,並忽略它。

該項目在.net 3.5,C#上,並且是一個網站項目(而不是Web應用程序)。

任何幫助表示讚賞!

+7

它是靜態的,PageA.GetStringInfo稱之爲(); – asawyer

+0

你使用當前的代碼片斷得到了什麼樣的錯誤? – scartag

+0

我得到的問題是它沒有發現PageA即使存在。所以當我嘗試實例化頁面時,它只是要求我爲它生成方法存根,而不是找到其他頁面的類。 – Delebrin

回答

5

如果GetStringInfo方法是靜態的,你並不需要的PageA一個實例來調用它:

public partial class PageB : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     string info = PageA.GetStringInfo();   
    } 
} 
+0

當我嘗試這樣做時,這只是爲PageA的類返回「當前上下文中不存在」。 – Delebrin

+0

@Delebrin,那麼你沒有向我們展示一切。您已經顯示的代碼應該按照我向您展示的方式工作。還要確保如果'PageA'類是在與PageB不同的名稱空間中定義的,則該名稱空間被引入到範圍中。順便說一下,這兩個頁面在同一個ASP.NET應用程序中? –

+0

他們都在同一個網站解決方案。這不是一個真正的Web應用程序,這是我認爲是問題的一部分。我可以爲兩個頁面添加名稱空間顯式,但由於頁面是動態編譯的,所以名稱空間被忽略。 – Delebrin