网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 手机学院 | 邮件系统 | 网络安全 | 认证考试
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > ASP.NET技巧
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
本月文章推荐
..NET正则表达式使用高级技巧之反.
.在.NET开发中灵活使用TreeView控.
.使用ASP.NET 2.0中的ReportViewe.
.权限树中Checkbox的操作[Asp.Net.
.ASP.Net防止刷新自动触发事件的解.
.使用更精简的代码保证ASP.NET应用.
.读取Excel文件时出现null的解决方.
.动态改变asp.net网页的标题.
.使用.NET实现断点续传.
.用ASP.NET 2.0 FormView控件控制.
.设置页面buffer引出来的问题 .
.利用WebClient获取远程数据(仅做.
.在asp.net中操作sql server数据库.
.Asp.Net小技巧之在client端调用s.
.在VS2003+IE7.0下调试asp.net权限.
.小tips:asp.net 2.0中在gridview.
.简单绑定要注意的问题_AX.
.ASP.net在页面所有内容生成后、输.
.包含实时功能的ASP.NET系统结构 .
.Asp.net生成htm静态文件的两种途.

如何使用FindControl查找内容页上的某个控件?

发表日期:2006-7-7

有以下两个页面Default.aspx和Result.aspx,代码如下:
<!-- Default.aspx -->
<%@ Page Language="C#" AutoEventWireup="true" MasterPageFile="~/Default.master"  CodeFile="Default.aspx.cs" Inherits="_Default" %>
<asp:Content ID="Content1" runat="server" ContentPlaceHolderID="ContentPlaceHolder1">
    &nbsp;<asp:Label ID="Label1" runat="server" Text="Please input a string here"></asp:Label>
    <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
    <asp:Button ID="Button1" runat="server" Text="Button" PostBackUrl="~/Result.aspx" /></asp:Content>

//Default.aspx.cs
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
//using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

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

<!-- Result.aspx -->
<%@ Page Language="C#" MasterPageFile="~/Default.master" AutoEventWireup="true" CodeFile="Result.aspx.cs" Inherits="Result" Title="Untitled Page" %>
<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
    <asp:Label ID="Label1" runat="server" Text="The string you input in the previous page is"></asp:Label>
    <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
</asp:Content>
//Result.aspx.cs
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

public partial class Result : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (PreviousPage != null)
        {
            TextBox tb = (TextBox)PreviousPage.FindControl("TextBox1");
            if (tb != null)
                TextBox1.Text = tb.Text;
        }
    }
}
 

这两个页面都指定了MasterPageFile属性。因为该MasterPage中的内容无关紧要,就不列出来了。在Default.aspx上有两个控件:TextBox1用于接受用户的输入,Button1用于提交页面,其PostBackUrl指向Result.aspx。在Result.aspx.cs的Page_Load方法中尝试在TextBox1中显示用户在前一页面的TextBox1中输入的字符串。当执行以下语句时:

TextBox tb = (TextBox)PreviousPage.FindControl("TextBox1");

tb的值为null。将以上语句更改为如下代码:

Content con = (Content)PreviousPage.FindControl("Content1");
if (con == null)
    return;

TextBox tb = (TextBox)con.FindControl("TextBox1");

但con的值为null,这样后续的语句也不可能执行了。问题出在哪里呢?

经过一番搜索,在forums.asp.net中找到了答案,以下引用的是bitmask的说法:
...becasue the Content controls themselves dissapear after the master page rearranges the page. You can use the ContentPlaceHolders, or the <form> on the MasterPage if there are no INamingContainers between the form and the control you need.


所以以上的代码应该改成:

TextBox tb = (TextBox)PreviousPage.Master.FindControl("ContentPlaceHolder1").FindControl("TextBox1");

bitmask还在他的博客上写了一篇文章来阐述FindControl方法和INamingContainers接口:
http://www.odetocode.com/Articles/116.aspx

http://movingboy.cnblogs.com/archive/2006/07/06/444690.html

上一篇:在.NET 2.0 中发送Email 人气:8406
下一篇:从asp.net页面发送电子邮件 人气:7060
浏览全部FindControl的内容 Dreamweaver插件下载 网页广告代码 2009年新年快乐