访问类中的ASPX元素

时间:2012-06-20 21:39:36

标签: c# asp.net

我有一堆操作ASPX页面元素的方法,此时将它们封装到自己的静态对象中是有意义的。但是,似乎我无法访问ASPX页面之外的表单元素。关于如何解决这个问题的任何想法?

3 个答案:

答案 0 :(得分:1)

您需要将Page本身传递给类,请参阅下面的示例:

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对象相结合。我建议您重新考虑您尝试制作的课程设计,而不是完全依赖于Page对象。

答案 1 :(得分: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!");
}

答案 2 :(得分:0)

如果你真的想要封装功能,我猜你最好创建一个类,在其中将相关元素传递给构造函数。

如果您的目标是在其他页面中重用,则可以创建一个继承的基页。另一个选择是在您从页面引用的母版页中执行操作。

我认为需要更详细的问题来提供更详细的答案。