2011-09-02 51 views
0

我對asp.net相當陌生,我試圖創建網站。我在AppCode/GSA中有一個類,我需要訪問在default.aspx.cs中聲明的事件處理程序。任何人都可以幫忙嗎? 我試過尋找它,但我得到的是標準的方法調用像classname.methodname()創建該類的實例後。請幫我在這裏。如何從另一個類中調用在Default.aspx.cs中定義的方法

這裏是我想要做的,爲什麼我需要調用在default.aspx.cs方法

我打電話GSA功能,使這我使用的顯示在地方搜索結果HTML字符串持有人。它工作得很好。現在我在顯示的每個搜索前添加按鈕。當用戶點擊這個按鈕時,該按鈕應該被textfield替換,並且它將包含該搜索結果的小網址。

現在我正在獲取每個結果顯示的按鈕,我必須將事件處理程序分配給該按鈕。我試圖把該事件處理程序放入GSA.cs文件本身,但該函數沒有被調用,因爲它沒有在默認情況下定義,所以我決定把該事件處理程序放在defalut.aspx.cs中

+6

爲什麼?您應該將處理程序中的代碼移到單獨的類中。 – SLaks

+0

您不應該在App_Code的類中訪問事件處理程序,而且您也不需要這兩者。找到一種方法將事件處理程序中的信息提供給類,或者將事件處理程序中的代碼放入更易訪問的地方。如果您可以發佈一些代碼,我們會盡力爲您提供幫助。 –

+0

我編輯了這個問題來詳細說明我面臨的問題。 – slonkar

回答

0

這是你想要的嗎? ?

Default.aspx.cs

using System; 
using System.Collections.Generic; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 

public partial class _Default : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     string a = Class1.ctest(); 
     Response.Write(a); 
    } 
} 

在App_Code文件/的Class1.cs

using System; 
using System.Collections.Generic; 
using System.Web; 

/// <summary> 
/// Summary description for Class1 
/// </summary> 
public class Class1 
{ 
    public Class1() 
    { 

    } 
    public static string ctest() 
    { 
     string test = "I need this"; 
     return test; 
    } 
} 

更新(由OP請求代碼): Default.aspx.cs:

using System; 
    using System.Collections.Generic; 
    using System.Web; 
    using System.Web.UI; 
    using System.Web.UI.WebControls;public partial class _Default : System.Web.UI.Page 
    { 
    protected void Page_Load(object sender, EventArgs e) 
    { 
    string a = pick(); 
    Response.Write(a); 
    } 
    protected string pick() 
    { 
    string test = "I need this"; 
    return test; 
    } 
    } 
+1

我認爲這是他想要的相反... –

+0

@Mark - 我不知道他到底意味着什麼,我怎麼編碼。至於他的問題是「他需要如何使用調用函數」,因爲我寫了一個示例代碼。我希望!他可以通過參考我的代碼來開發他所需要的東西。 – Mal

+0

不,我想做的是完全相反的..我想使用事件處理程序在另一個類 – slonkar

2

一般來說,事件處理程序不是應該在類之間共享的事物。如果您需要在兩個地方使用相同的功能,然後將這些功能伸到自己的方法,並調用該方法在你的事件處理程序:

private void MyEventHandler(object sender, EventArgs e) 
{ 
    // some complex functionality 
} 

應該改爲:

public void DoComplexFunctionality() 
{ 
    // some complex functionality 
} 

private void MyEventHandler(object sender, EventArgs e) 
{ 
    DoComplexFunctionality(); 
} 

的問題「我在哪裏放DoComplexFunctionality()?」只有知道它所做的具體事情的人才能做出有意義的回答。你可以讓它成爲一個靜態類的成員,這將使任何可以看到該類的代碼都可以訪問它。或者,如果它負責變換一組特定的值,則可以將其作爲封裝這些值的類的實例成員,並將該類的實例傳遞給需要調用該方法的任何人。

無論如何,試圖直接調用一個事件處理程序並不是一種可行的方法。

+0

我編輯了我的問題,解釋我爲什麼採用這種方法。 – slonkar

1

你真的應該永遠不要從其他代碼調用事件處理程序。

我沒有足夠的信息繼續下去,但我可以想象兩種情況可能會讓您覺得您應該這樣做:常見頁面情景和共享業務邏輯情景。

如果您希望在多個頁面中使用一些代碼塊,那麼我強烈建議您創建一個派生自「Page」類的父類,並將所有常見代碼放在那裏。這與主從關係不一樣;它只是實現所有頁面將使用的代碼的一種方式。例如,我使用父類來管理強類型的會話類。

如果您正在尋找共享或實現業務邏輯,而且恰好您已將其放入Default.aspx.cs類中,那麼您需要重新考慮您的架構。即使您沒有使用MVC方法,我也強烈建議您採用三層方法處理除了最瑣碎的網站以外的所有網站(一旦完成,額外的工作就會變得微不足道)。在這種情況下,您將創建實現業務邏輯的類,並僅將代碼隱藏代碼用於UI工作。因此,典型的代碼隱藏方法會從UI中提取一些內容,創建業務邏輯類並將其傳入,然後處理結果(反之亦然)。在這種情況下,您可以調用業務邏輯類來實現您想要在任何位置共享的代碼 - 包括您的測試類。

1

拖動Default.aspx.cs與您的所有其他類的AppCode文件夾,並在您的的Default.aspx改變CodeFile="~/App_Code/Default.aspx.cs"CodeFile路徑您現在應該能夠訪問它像任何其他類。

相關問題