2012-06-20 92 views
0

我有一堆操縱ASPX頁面元素的方法,此時將它們封裝到它們自己的靜態對象中是有意義的。但是,好像我沒有訪問ASPX頁面以外的表單元素。有關如何去做這件事的任何想法?類內部訪問ASPX元素

+0

爲什麼一個靜態對象?它真的沒有國家嗎?此外,這是你想要只有基類的東西,所以你可以繼承子類中的功能?最後,如果它正在操作aspx頁面元素,那麼使用元素和封裝的功能創建Web用戶控件更有意義嗎?總之,你能舉一個你有什麼和你想要什麼的實例嗎? – NotMe

+0

我不知道你的意思是「我沒有訪問ASPX頁面以外的表單元素」。你的意思是你使用FindControl並且它不返回任何東西?請發佈代碼示例來解釋你在做什麼,並更清楚地解釋錯誤。 –

回答

0

您需要將Page對象作爲其中一個參數傳遞給您的類方法,這樣它的元素將在類內部可訪問。

例如,如果你有一個類,如:

public class CMyDataClass { 
    public bool CompareText(System.Web.UI.Page i_oPage) { 
     TextBox oTextBox = i_oPage.FindControl("TextBox1"); 
     return (oTextBox.Text == "My Data"); 
    } 
} 

您可以使用它像這樣從頁面:

CMyDataClass oMyDataClass = new CMyDataClass(); 

if (oMyDataClass.CompareText(this)) { 
    Response.Write("Ok!"); 
} 
0

如果你真的想封裝的功能,我想你最好的創建一個將相關元素傳遞給構造函數的類。

如果您的目標是在其他頁面重複使用,您可以創建一個基本頁面,從中繼承。另一種選擇是在您從頁面引用的母版頁中進行操作。

我認爲需要更詳細的問題才能給出更詳細的答案。

1

您需要向網頁本身傳遞到類,見下面的例子:

ASPX頁面

<form id="form1" runat="server"> 
<div> 
    <asp:TextBox ID="txtTest" runat="server" Text="Test" /> 
</div> 
</form> 

代碼隱藏

protected void Page_Load(object sender, EventArgs e) 
    { 
     Process p = new Process(this); 
     string s = p.GetTextBoxValue(); 
    } 

public class Process 
    { 
     public Page thePage { get; set; } 

     public Process(Page page) 
     { 
      thePage = page; 
     } 

     public string GetTextBoxValue() 
     { 
      TextBox tb = (TextBox)thePage.FindControl("txtTest"); 
      return tb.Text; 
     } 

    } 

進程可能不是該類的最好名稱,但這完全是一個演示。另外,將Page對象傳遞到另一個類中會將該類傳遞給Page對象。我會建議重新考慮你所設計的類的設計,以便完全不依賴頁面對象。