Control.FindControl (String):在当前的命名容器中搜索带指定 id参数的服务器控件。(有点类似javascript中的getElementById(string))

简单的例子:

<form id="form1" runat="server">

<div>

<asp:TextBox ID="TextBox1" runat="server">TextBox</asp:TextBox>

<asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" />

<br />

<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>

</div>

</form>

如果需要获得页面中的"TextBox1",代码中可以使用this.TextBox1来引用,这里我们使用FindControl:

protected void Button1_Click(object sender, EventArgs e)

{

//Control c = this.FindControl("TextBox1");

//TextBox tb= (TextBox)c;

//FindControl返回的是一个Control类型的控件,需要强制类型转化成TextBox类型

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

this.Label1.Text = tb.Text;   
    }

当TextBox1放到其他控件里应该怎么查找呢?

<div>

<asp:Panel ID="Panel1" runat="server" Height="50px" ;125px">

<asp:TextBox ID="TextBox1" runat="server">TextBox</asp:TextBox>

<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>

<asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" />

</asp:Panel>

</div>

当TextBox1放到Panel里,似乎没什么影响 TextBox tb=(TextBox)this.FindControl("TextBox1"),

当查看生存页面的HTML代码是发现,TextBox的ID并没有改变,所以可以获得TextBox1。

<div>

<div id="Panel1" style="height:50px;;">

<input name="TextBox1" type="text" value="TextBoxdsd" id="TextBox1" />

<span id="Label1">TextBoxdsd</span>

<input type="submit" name="Button1" value="Button" id="Button1" />

</div>

</div>

当TextBox1放到DataGrid中

<asp:DataGrid ID="dg1" runat="server" OnSelectedIndexChanged="dg1_SelectedIndexChanged">

<Columns>

<asp:TemplateColumn>

<ItemTemplate>

<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>

</ItemTemplate>

</asp:TemplateColumn>

<asp:ButtonColumn CommandName="Select" Text="选择"></asp:ButtonColumn>

</Columns>

</asp:DataGrid>

这时候this.FindControl("TextBox1")==null,无法获得TextBox1,查看生成页面HTML发现,页面有多个

<input name="dg1$ctl02$TextBox1" type="text" id="dg1_ctl02_TextBox1" />

<input name="dg1$ctl03$TextBox1" type="text" id="dg1_ctl03_TextBox1" />

TextBox1隐藏了,给DataGrid添加选择列,通过以下方法获得被选择行的TextBox1

protected void dg1_SelectedIndexChanged(object sender, EventArgs e)

{

Control c = this.dg1.Items[this.dg1.SelectedIndex].FindControl("TextBox1");

//Control c = this.dg1.SelectedItem.FindControl("TextBox1");

TextBox tb = (TextBox)c;

tb.Text = "TextBox";

}

protected void dg1_EditCommand(object source, DataGridCommandEventArgs e)

{

TextBox tb = (TextBox)e.Item.FindControl("TextBox1");

this.Label1.Text = tb.Text.ToString();

}

如果是在DataGrid的页眉和页脚:

((TextBox)this.dg1.Controls[0].Controls[0].FindControl("TextBoxH")).Text = "Head";

((TextBox)this.dg1.Controls[0].Controls[this.dg1.Controls[0].Controls.Count -1].FindControl("TextBoxF")).Text = "Footer";

TextBox1在Repeater中

<asp:Repeater ID="Repeater1" runat="server" DataSourceID="SqlDataSource1" OnItemCommand="Repeater1_ItemCommand">

<ItemTemplate>

<asp:TextBox ID="TextBox1" runat="server" Text=""></asp:TextBox><%#DataBinder.Eval(Container.DataItem,"ProductName")%>

<asp:Button ID="btn"OnClick="btn_click" runat="server" Text="dddd" /><br />

</ItemTemplate>

</asp:Repeater>

通过按钮来获得TextBox1:

protected void btn_click(object sender, EventArgs e)

{

//获得按钮

Button btn = (Button)sender;

TextBox tb = (TextBox)btn.Parent.FindControl("TextBox1");

tb.Text = "Text";

}

或者

foreach (RepeaterItem item in this.Repeater1.Items)

{

((TextBox)item.FindControl("TextBox1")).Text = "Text2";

}

自定义控件里的TextBox1

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="WebUserControl.ascx.cs" Inherits="WebUserControl" %>

<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>

引用<uc1:WebUserControl ID="WebUserControl1" runat="server" />

获取TextBox1:

((TextBox)this.WebUserControl1.FindControl("TextBox1")).Text = "userc";

模板页访问页面TextBox1

//模板页的TextBox1

TextBox tbM = (TextBox)this.FindControl("TextBox1");

//页面中的TextBox1

TextBox tbC = (TextBox)this.FindControl("ContentPlaceHolder1").FindControl("TextBox1");

tbC.Text = tbM.Text;

页面使用模板页的TextBox1

//模板页的TextBox1

TextBox tbM = (TextBox)Master.FindControl("TextBox1");

//本页面的TextBox1

//错误的方法:TextBox tbC = (TextBox)this.FindControl("TextBox1");

TextBox tbC = (TextBox)Master.FindControl("ContentPlaceHolder1").FindControl("TextBox1");

tbM.Text = tbC.Text.ToString();

FindControl的使用方法的更多相关文章

  1. WebForm FindControl的使用方法

    Control.FindControl (String):在当前的命名容器中搜索带指定 id参数的服务器控件. 有点类似javascript中的getElementById(string); 简单的例 ...

  2. C# 中 FindControl 方法及使用

    FindControl 的使用方法 FindControl (String  id): 在页命名容器中搜索带指定标识符的服务器控件.(有点类似javascript中的getElementById(st ...

  3. Page.FindControl(string id) 与母版页结合后发现的一个问题

    MSDN上解释Page.FindControl(string id)方法用于查找指定ID的控件.例如: <asp:TextBox id="Email" runat=" ...

  4. Asp.Net 之 MasterPage

    母版页是VS2005中新引入的一个概念,它很好地实现界面设计的模块化,并且实现实现了代码的重用.它就像婚纱影楼中的婚纱模板,同一个婚纱模板可以给不同的新人用,只要把他们的照片贴在已有的婚纱模板就可以形 ...

  5. asp.net 母版页使用详解--转

    http://www.cnblogs.com/_zjl/archive/2011/06/12/2078992.html 母版页是VS2005中新引入的一个概念,它很好地实现界面设计的模块化,并且实现实 ...

  6. step_by_step_G+入门-在线服务

    第一步:先大概介绍下我们的窗体的布局框架,窗体大体分为以下3大块: 顶部:也就是大的模块划分(比如首页,软件管家,在线服务等) 内容区域:根据选择的不同的顶部模块,进行不同的内容展示: 底部:设置,下 ...

  7. asp.net 母版页使用详解

    母版页是VS2005中新引入的一个概念,它很好地实现界面设计的模块化,并且实现实现了代码的重用.它就像婚纱影楼中的婚纱模板,同一个婚纱模板可以给不同的新人用,只要把他们的照片贴在已有的婚纱模板就可以形 ...

  8. nim_duilib(3)之按钮

    introduction 更多控件用法,请参考 here 和 源码. 本文的代码基于这里 lets go xml文件添加代码 下面的xml文件内容,删除label控件的相关代码,增加了3个按钮. 其中 ...

  9. javaSE27天复习总结

    JAVA学习总结    2 第一天    2 1:计算机概述(了解)    2 (1)计算机    2 (2)计算机硬件    2 (3)计算机软件    2 (4)软件开发(理解)    2 (5) ...

随机推荐

  1. JSONKit 在iOS9 arm7 64位下出现的问题

    最近遇到了一个关于JSONKit的问题,在项目加了arm7 64位以后,JSONKIT会出现[params JSONString] forKey:@”gson”];报错的情况,如下图 具体原因不太清楚 ...

  2. Java多线程:Semaphore

    Semaphore为并发包中提供用于控制某资源同时可以被几个线程访问的类 实例代码: // 允许2个线程同时访问 final Semaphore semaphore = new Semaphore(2 ...

  3. Struts2中的链接标签 <s:url>和<s:a>---在action中获取jsp表单提交的参数(转)

    转自:http://sgl124764903.iteye.com/blog/444183 1.普通链接 Web程序中最普通的应用是链接到其他页面,下面看Welcome.jsp. <%@ page ...

  4. 如何用angularjs制作一个完整的表格之五__完整的案例

    由于本人也是边学边写,因此整理的比较乱,下面放出我例子的完整代码,方便大家交流测试,如有问题欢迎评论 首先,表格采用的是BootStrap样式编辑的,主要使用的是angularjs,为了方便也有jQu ...

  5. scons小结

    scons是用python写的,据说是比make要方便很多,其实我都没写过makeFile...... 1.安装 方式1:下载安装包安装,需要用python setup.py install去编译 方 ...

  6. CSS3中动画transform必须要了解的Skew变化原理

    transform是CSS3中比较安全的动画(对于性能来说),其中有一些动画属性,来执行不同的变化.今天我们来了解skew的变化原理. skew,其实使用的频率不是很高,当然也没有最低.但是往往,一直 ...

  7. css学习--inline-block详解及dispaly:inline inline-block block 三者区别精要概括

    *知识储备: 内联元素:是不可以控制宽和高.margin等:并且在同一行显示,不换行. 块级元素:是可以控制宽和高.margin等,并且会换行. 1.inline-block 详解 (1)一句话就是在 ...

  8. SQL 左外连接查询 将右表中的多行变为左表的一列或多列

    示例: --行列互转 /**************************************************************************************** ...

  9. rpmbuild构建包时的宏定义的赋值

    rpmbuild -bb  SPECS/git.spec --define="_topdir `pwd`" rpmbuild --rebuild  SRPMS/git.src.rp ...

  10. arp欺骗

    arp欺骗原理 某机器A要向主机B发送报文,会查询本地的ARP缓存表,找到B的IP地址对应的MAC地址后,就会进行数据传输.如果未找到,则广播A一个ARP请求报文(携带主机A的IP地址Ia——物理地址 ...