`
geniusleft
  • 浏览: 63729 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

解决使用Page.FindControl方法找不到指定控件的问题

阅读更多

ASP.NET开发人员在使用一些动态导入控件的功能的时候, 常会遇到这样一个问题: 就是明明有这个ControlID, 但使用Page.FindControl(ControlID)得到的结果却是null, 这是bug? 还是某种不明机制?

首先要说的是, 这不是bug. 而为何使用Page.FindControl方法找不到指定控件, 我们可以在该页的页指令中添加 Trace=Ture 指令来跟踪页面输出查看控件树。

其次,得说一下FindControl方法的实现机制,FindControl方法是在当前naming container查找指定ControlID对应的控件,该naming container是一个实现了INamingContainer接口的对象。问题的关键是,Page是指定ControlID的当前naming container么?

一个页面的控件树中,Page对象必然是顶级的naming container,但绝非必然是唯一的naming container。譬如当有GridView存在的话,GridView其实也是一个naming container,要找GridView中的一个ControlID,就不能用Page.FindControl,而得用[GridView对象].FindControl方法。

再譬如最普遍的,在ASP.NET 2.0中,引入了MasterPage的机制,在当前页使用MasterPage的情况下,当前页也产生了类似ContentPlaceholder1这样的naming container,这时查找当前页的控件,也不能使用Page.FindControl方法,而得要用ContentPlaceholder1.FindControl方法。

很多时候,因为是动态控件,明知道是在同一个naming container中,但不知道该naming container是什么对象,一个控件要找到另一个控件,可以用this.Parent.FindControl方法。

至此问题解决,祝新年快乐!

分享到:
评论

相关推荐

    ASP.Net PlaceHolder、Panel等控件未实现INamingContainer,导致FindControl无效

    // 输出True,表示没有找到控件 Response.Write(spnButtons.FindControl(btn.ID) == null); 而如果是下面的代码就可以了: 代码如下:Panel spnButtons = new Panel(); Page.Controls.Add(spnButtons);// 创建Panel...

    使用模板页后内容页中控件查找

    在服务器端代码中,首先通过`Page.Master.FindControl("head")`找到名为`head`的内容占位符,再通过`FindControl("btn_add")`方法查找名为`btn_add`的控件。如果找到的控件不为空,并且其类型为`System.Web.UI....

    repeater控件使用实例

    本实例将深入讲解`Repeater`控件的使用方法,包括其基本概念、结构、绑定数据以及如何自定义模板。 1. 基本概念: `Repeater`控件是一种动态数据呈现控件,它通过使用模板来生成HTML输出。这些模板可以包含任何ASP...

    用户控件与父页面及相互间方法调用和属性访问

    用户控件与父页面及相互间方法调用和属性访问 用户控件开发中,实现控件与父页面...哈哈,我们能方法都能获得难道值还拿不到?再者途径很多,这里就不多嘴了:) * 注意:被调用父页或其他用户控件的方法必须是 public!

    asp.net 动态添加删除控件

    - 使用`FindControl`方法找到动态生成的控件,然后使用`AddHandler`方法附加事件处理程序,如`Button1_Click`。 3. **数据绑定和动态控件**: - 如果动态添加的控件需要与数据源绑定,例如在循环中生成多个...

    asp.net Page.Controls对象(找到所有服务器控件)

    ### ASP.NET `Page.Controls` 对象详解 ...需要注意的是,对于复杂的控件层次结构,可能还需要使用`Control.FindControl`等方法来访问深层的子控件。此外,理解控件的生命周期对于正确地操作这些控件也是非常关键的。

    VS2008(C#)中的ASP.NET子页嵌套多层母版页的控件访问方法

    1. **FindControl** 方法:这是最基础的方法,通过递归遍历页面控件树来查找指定的控件。首先从子页面开始,然后向上遍历到父级母版页,直到找到目标控件。例如: ```csharp protected void Page_Load(object ...

    基于ASP.NET+C#实现Web网页动态切换加载用户控件程序例子

    这里的`Page.LoadControl`方法用于从指定路径加载用户控件,并将其转换为`UserControl`对象,然后添加到页面的某个容器控件(如`PlaceHolder`)中。 然而,动态加载用户控件可能会导致控件的状态丢失,因为默认情况...

    asp网页使用datalist控件代码

    2. 数据绑定语法:使用`DataSourceID`属性绑定到数据源控件,或者在代码后面使用`DataBind()`方法动态绑定数据。 3. 显示模板:`DataList`有几种内置模板,如`ItemTemplate`(用于定义每个数据项的外观)、`...

    Ajax读取用户控件中repeater、datalist、listview中的内容并写到页面

    3. **步骤三:** 使用jQuery的Ajax方法发送异步请求到服务器,获取控件的数据。在客户端JavaScript中,你可以这样编写: ```javascript $.ajax({ url: 'GetControlData.aspx', type: 'POST', data: { controlId:...

    asp.net如何使用窗体分隔控件

    - 在C#代码隐藏文件中,可以通过`FindControl`方法找到`Panel`控件,例如:`Panel myPanel = (Panel)Page.FindControl("myPanel");` - 设置`Panel`的可见性:`myPanel.Visible = true/false;` - 添加动态内容:`...

    C#动态代码生成控件后其他事件不能获取该控件值的解决方法

    这是因为ASP.NET Web Forms在每次HTTP请求时都会重新创建控件树,动态生成的控件在页面生命周期的早期阶段并不存在,因此在Button2的Click事件中找不到该控件。 为了解决这个问题,我们需要确保在每个请求中都重新...

    在_Web_Form_动态建立控件的正确方法

    然而,很多ASP.NET初学者在尝试动态创建控件时遇到了困难,比如动态创建的控件无法正确加载ViewState数据、控件事件处理不正常等问题。本文将通过一个具体的示例,详细讲解如何在Web Forms中动态创建TextBox和Button...

    动态指定页面样式表的方法.

    本文将深入探讨几种在ASP.NET中动态指定页面样式表的方法,包括但不限于通过服务器端控件、数据库集成以及动态加载技术。 #### 方法一:利用服务器端控件动态更改样式表 这种方法的核心在于将HTML元素转化为服务器...

    Asp.net动态加载控件的示例源码

    这里的`LoadControl`方法用于从指定的路径加载用户控件,并返回一个实例。 - **保存视图状态**:由于动态加载的控件不会自动保存其视图状态,所以需要手动处理。在`Page_Load`事件中,检查`IsPostBack`属性,如果是...

    ASP.NET 2.0 中实现跨页面提交

    在ASP.NET 2.0中,`PostBackUrl`属性被添加到`Button`控件中,使得按钮点击后可以跳转到指定的页面,同时将当前页面的状态和控件值传递过去。这意味着,当用户点击带有`PostBackUrl`属性的按钮时,不是执行页面的`...

    获取放置在用户控件表单网页中的gridview的ID

    `FindControl`方法会递归查找指定ID的控件。确保`GridViewID`是GridView在设计时的服务器端ID。 ### JavaScript 在客户端使用JavaScript获取GridView ID,我们需要知道GridView对应的HTML元素ID。ASP.NET通常会将...

    c# asp.net 控制控件的坐标位置,更改控件坐标,后台改变前台CSS样式,top,left

    例如,你可以创建一个自定义CSS类,然后在后台代码中动态地将其添加到控件的`CssClass`属性上: ```csharp // 定义CSS类 public static string MyCustomStyle = "myCustomStyle { position: absolute; top: 50px; ...

    GridView控件的使用

    在本篇文章中,我们将深入探讨GridView控件的使用,以及如何实现其基本功能。 首先,GridView控件的配置通常在`.aspx`页面中进行。例如,在`Default.aspx`文件中,你可以看到如下的HTML标记: ```html <!-- 这里...

Global site tag (gtag.js) - Google Analytics