非使用FindControl方法找到深层嵌套的控件
首先看下示意图
上图中,有七层MasterPage嵌套,最后一层MasterPage有一个ASPX网页,在ASPX网页上有一个ASCX用户控件,在ASCX用户控件有一个TextBox控件。
在第一层的MasterPage拉一个Button和一个Label控件。 如今想按一下这个铵钮,去获取TextBox的值。
本只是一个实例,实际开发时,控件嵌套层数是一个未知数,最后一个也未必是TextBox。
下面是Insus.NET解决方法。
由于层次是未知数,所以Insus.NET写一个迭代方法:
{
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,这个接口内有一个返回对象函数。
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用户控件实作这个接口:
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铵钮事件:
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方法找到深层嵌套的控件相关推荐
- Page.FindControl方法找不到指定控件的原因
在ASP.NET 2.0中,引入了MasterPage的机制,在当前页使用MasterPage的情况下,放在 ContentPlaceholder1这样的内容页的控件无法用Page.FindContr ...
- 【ASP.NET】第八课——GridView 控件的编辑功能优化,GridView控件中嵌套DropDownList控件
知识点:掌握 GridView 的编辑.高亮显示的功能 .GridView控件中嵌套DropDownList控件获取数据源. [ASP.NET]第七课--数据绑定和 GridView 控件的使用 重点 ...
- MVC为Html对象建立一个扩展方法,使用自己的控件就像使用TextBox一样方便
先看一下我想要的结果: 很容易它就是一个单选按钮组,当我后台为Html对象(HtmlHelper的一个实例,它被定义在System.Web.Mvc名称空间下的WebViewPage类,即它对于所有MV ...
- 给DataList分页有两个办法:1、自定义实现分页方法 2、用第三方控件(例如AspNetPager)
给DataList分页有两个办法:1.自定义实现分页方法 2.用第三方控件(例如AspNetPager) 先介绍下如何自定义实现分页方法. 我的DataList分页方法的核心原理是利用PagedDat ...
- WPF框架嵌套用户控件,显示与切换(详细,代码复制可用)
WPF框架手敲实现嵌套页面,点击显示与切换 下面附上成果图吧,看了之后觉得适用就可以参考一下,否则就不要浪费时间了 操作时间 1.此篇作为学习记录,是一个WPF框架window嵌套用户控件的使用.点击 ...
- Repeater控件嵌套Repeater控件
此篇为Repeater控件嵌套Repeater控件教程,你可以从下面相关链接下载到教程视频与源程序. 视频: 文件格式:.wmv:大小21,401KB:长度:00:16:58. 下载地址:http:/ ...
- 当PreviousPage.FindControl遇到MasterPage,如何查找控件?
有以下两个页面Default.aspx和Result.aspx,代码如下: <!-- Default.aspx --> <%@ Page Language="C#" ...
- this.PreviousPage.FindControl遇到MasterPage,如何查找控件?
1.先找到链接的页的母版页this.PreviousPage.Master 2.从母版页中findControl的ContentPlaceHolder对象 3.从这个ContentPlaceHolde ...
- 方法问题谨慎去获取控件的高和宽,以防带来不必要的性能问题
最近使用开发的过程中出现了一个小问题,顺便记录一下原因和方法--方法问题 int w = View.MeasureSpec.makeMeasureSpec(0,View.MeasureSpec.UNS ...
最新文章
- RuntimeError: maximum recursion depth exceeded
- CentOS7搭建lamp(module)并实现Xcache、https访问
- 分布式领域架构师要掌握的技术
- 安卓代码迁移:Program sh not found in PATH
- java 代码运行速度慢_C代码的运行速度总是比Java快,对吧? 错误!
- 前端学习(3303):函数组件组件子组件useRef聚焦
- Linux 内核宏 time_after解析
- sql批量插入数据mysql_MYSQL批量插入数据库实现语句性能分析
- 播放视频和音频文件java
- DDD战略篇:架构设计的响应力
- (36)虚拟时钟(中心对齐约束)
- SpringBoot项目中图片的引用
- 【Spring Cloud】微服务和Spring Cloud
- python_vlc 播放http流
- bzoj 1179: [Apio2009]Atm(Trajan+SPFA)
- docker swarm英文文档学习-11-上锁你的集群来保护你的加密密钥
- 第01课:敏捷教练和 ScrumMaster 基本功四部曲(iPad 版)
- 通信工程专业就业怎么样?难不难学?
- 个人计算机多核cpu好处,多核CPU的优缺点
- 有趣的HTML实例(七) 注册登录界面Ⅱ(css+js)