首先看下示意图

上图中,有七层MasterPage嵌套,最后一层MasterPage有一个ASPX网页,在ASPX网页上有一个ASCX用户控件,在ASCX用户控件有一个TextBox控件。

在第一层的MasterPage拉一个Button和一个Label控件。 如今想按一下这个铵钮,去获取TextBox的值。

本只是一个实例,实际开发时,控件嵌套层数是一个未知数,最后一个也未必是TextBox。

下面是Insus.NET解决方法。

由于层次是未知数,所以Insus.NET写一个迭代方法:

IterationFindControl

protected Control IterationFindControl(Control control, string id)
    {
        if (control.ID == id)
        {
            return control;
        }

foreach (Control ctl in control.Controls)
        {
            Control c = IterationFindControl(ctl, id);
            if (c != null)
            {
                return c;
            }
        }

return null;
    }

为了获取TextBox控件值,Insus.NET写了一个接口Interface,这个接口内有一个返回对象函数。

IGetable

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

/// <summary>
/// Summary description for IGetable
/// </summary>
namespace Insus.NET
{
    public interface IGetable
    {
        object GetObject();
    }
}

为什么要写接口,因为Insus.NET不清楚这个TextBox在将来的程序中为变为什么控件,或是什么对象,也不知道它的ID是什么?

接下来,我们要为ASCX用户控件实作这个接口:

View Code

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Insus.NET;

public partial class WebUserControl : System.Web.UI.UserControl,IGetable
{
    protected void Page_Load(object sender, EventArgs e)
    {
        
    }

public object GetObject()
    {
        return this.TextBox1.Text;
    }
}

最后是第一层MasterPage铵钮事件:

View Code

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Insus.NET;

public partial class MasterPage : System.Web.UI.MasterPage
{
    protected void Page_Load(object sender, EventArgs e)
    {

}

protected void ButtonGet_Click(object sender, EventArgs e)
    {
        IGetable obj = (IGetable)IterationFindControl(this, "WebUserControl1");
        this.LabelResult.Text = obj.GetObject().ToString ();        
    }
}

演示源程序(asp.net 4.5 + C#):

http://download.cnblogs.com/insus/ASPDOTNET/Multiple_Nested.rar

非使用FindControl方法找到深层嵌套的控件相关推荐

  1. Page.FindControl方法找不到指定控件的原因

    在ASP.NET 2.0中,引入了MasterPage的机制,在当前页使用MasterPage的情况下,放在 ContentPlaceholder1这样的内容页的控件无法用Page.FindContr ...

  2. 【ASP.NET】第八课——GridView 控件的编辑功能优化,GridView控件中嵌套DropDownList控件

    知识点:掌握 GridView 的编辑.高亮显示的功能 .GridView控件中嵌套DropDownList控件获取数据源. [ASP.NET]第七课--数据绑定和 GridView 控件的使用 重点 ...

  3. MVC为Html对象建立一个扩展方法,使用自己的控件就像使用TextBox一样方便

    先看一下我想要的结果: 很容易它就是一个单选按钮组,当我后台为Html对象(HtmlHelper的一个实例,它被定义在System.Web.Mvc名称空间下的WebViewPage类,即它对于所有MV ...

  4. 给DataList分页有两个办法:1、自定义实现分页方法 2、用第三方控件(例如AspNetPager)

    给DataList分页有两个办法:1.自定义实现分页方法 2.用第三方控件(例如AspNetPager) 先介绍下如何自定义实现分页方法. 我的DataList分页方法的核心原理是利用PagedDat ...

  5. WPF框架嵌套用户控件,显示与切换(详细,代码复制可用)

    WPF框架手敲实现嵌套页面,点击显示与切换 下面附上成果图吧,看了之后觉得适用就可以参考一下,否则就不要浪费时间了 操作时间 1.此篇作为学习记录,是一个WPF框架window嵌套用户控件的使用.点击 ...

  6. Repeater控件嵌套Repeater控件

    此篇为Repeater控件嵌套Repeater控件教程,你可以从下面相关链接下载到教程视频与源程序. 视频: 文件格式:.wmv:大小21,401KB:长度:00:16:58. 下载地址:http:/ ...

  7. 当PreviousPage.FindControl遇到MasterPage,如何查找控件?

    有以下两个页面Default.aspx和Result.aspx,代码如下: <!-- Default.aspx --> <%@ Page Language="C#" ...

  8. this.PreviousPage.FindControl遇到MasterPage,如何查找控件?

    1.先找到链接的页的母版页this.PreviousPage.Master 2.从母版页中findControl的ContentPlaceHolder对象 3.从这个ContentPlaceHolde ...

  9. 方法问题谨慎去获取控件的高和宽,以防带来不必要的性能问题

    最近使用开发的过程中出现了一个小问题,顺便记录一下原因和方法--方法问题 int w = View.MeasureSpec.makeMeasureSpec(0,View.MeasureSpec.UNS ...

最新文章

  1. RuntimeError: maximum recursion depth exceeded
  2. CentOS7搭建lamp(module)并实现Xcache、https访问
  3. 分布式领域架构师要掌握的技术
  4. 安卓代码迁移:Program sh not found in PATH
  5. java 代码运行速度慢_C代码的运行速度总是比Java快,对吧? 错误!
  6. 前端学习(3303):函数组件组件子组件useRef聚焦
  7. Linux 内核宏 time_after解析
  8. sql批量插入数据mysql_MYSQL批量插入数据库实现语句性能分析
  9. 播放视频和音频文件java
  10. DDD战略篇:架构设计的响应力
  11. (36)虚拟时钟(中心对齐约束)
  12. SpringBoot项目中图片的引用
  13. 【Spring Cloud】微服务和Spring Cloud
  14. python_vlc 播放http流
  15. bzoj 1179: [Apio2009]Atm(Trajan+SPFA)
  16. docker swarm英文文档学习-11-上锁你的集群来保护你的加密密钥
  17. 第01课:敏捷教练和 ScrumMaster 基本功四部曲(iPad 版)
  18. 通信工程专业就业怎么样?难不难学?
  19. 个人计算机多核cpu好处,多核CPU的优缺点
  20. 有趣的HTML实例(七) 注册登录界面Ⅱ(css+js)

热门文章

  1. shell命令总结一
  2. Spark Mllib里的如何对单个数据集用斯皮尔曼计算相关系数
  3. 求一早间新闻~20170717
  4. [注]什么是用户?估计90%人不知道
  5. C#中如何控制播放音乐的声音大小
  6. 零基础入门Python:基本命令、函数、数据结构
  7. 非正弦周期电流电路和信号的频谱
  8. 关于php的梗儿_php几个不起眼儿的小技巧
  9. 看了5种分布式事务方案,最终选择了Seata,真香!
  10. 厉害了!Spring Boot 2.5正式发布