0

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

4

3 回答 3

1

You need to pass the Page itself into the class, see the example below:

ASPX page

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

Code-Behind

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

Class

    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;
        }

    }

Process is probably not the best name for the class, but this is purely a demo.

Also, passing the Page object into another class tight couples that class to the Page object. I would recommend reconsidering your design of the class you're trying to make to not rely on the Page object entirely.

于 2012-06-20T21:55:27.130 回答
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!");
}
于 2012-06-20T21:44:45.193 回答
0

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

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

我认为需要一个更详细的问题才能给出更详细的答案。

于 2012-06-20T21:50:55.960 回答