首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >访问类中的ASPX元素

访问类中的ASPX元素
EN

Stack Overflow用户
提问于 2012-06-20 21:39:36
回答 3查看 304关注 0票数 0

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

EN

回答 3

Stack Overflow用户

发布于 2012-06-20 21:55:27

您需要将Page本身传入到类中,如下例所示:

ASPX页面

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<form id="form1" runat="server">
<div>
    <asp:TextBox ID="txtTest" runat="server" Text="Test" />
</div>
</form>

代码隐藏

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    protected void Page_Load(object sender, EventArgs e)
    {
        Process p = new Process(this);
        string s = p.GetTextBoxValue();
    }

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    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可能不是类的最佳名称,但这只是一个演示。

此外,将Page对象传递到另一个类将该类与Page对象紧密耦合。我建议您重新考虑要创建的类的设计,不要完全依赖Page对象。

票数 1
EN

Stack Overflow用户

发布于 2012-06-20 21:44:45

您需要将Page对象作为参数之一传递给您的类方法,这样它的元素就可以在类中访问。

例如,如果你有一个这样的类:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class CMyDataClass {
   public bool CompareText(System.Web.UI.Page i_oPage) {
      TextBox oTextBox = i_oPage.FindControl("TextBox1");
      return (oTextBox.Text == "My Data");
   }
}

您可以在页面中像这样使用它:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
CMyDataClass oMyDataClass = new CMyDataClass();

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

Stack Overflow用户

发布于 2012-06-20 21:50:56

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

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

我认为有需要提出更详细的问题,才能提供更详细的答案。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11128606

复制
相关文章

相似问题

领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文