2012-06-20 26 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对象。我会建议重新考虑你所设计的类的设计,以便完全不依赖页面对象。