WebForm FindControl的使用方法
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)].Controls[].FindControl("TextBoxH")).Text = "Head"; ((TextBox)].Controls[].Controls.Count -].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:
<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>
或者
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();
WebForm FindControl的使用方法的更多相关文章
- ASP.NET -- WebForm -- HttpRequest类的方法和属性
ASP.NET -- WebForm -- HttpRequest类的方法和属性 1. HttpRequest类的方法(1) BinaryRead: 执行对当前输入流进行指定字节数的二进制读取. ( ...
- ASP.NET -- WebForm -- HttpResponse 类的方法和属性
ASP.NET -- WebForm -- HttpResponse 类的方法和属性 1. HttpResponse 类的方法 (1) AddCacheDependency: 将一组缓存依赖项与响应关 ...
- webform 页面传值的方法总结
ASP.NET页面之间传递值的几种方式 页面传值是学习asp.net初期都会面临的一个问题,总的来说有页面传值.存储对象传值.ajax.类.model.表单等.但是一般来说,常用的较简单有Quer ...
- FindControl的使用方法
Control.FindControl (String):在当前的命名容器中搜索带指定 id参数的服务器控件.(有点类似javascript中的getElementById(string)) 简单的例 ...
- WebForm页面间传值方法(转)
Asp.NET WEB FORMS 给开发者提供了极好的事件驱动开发模式.Asp .NET为我们提供了三种方式,一种是可以通过用QueryString来传送相应的值,再一种是通过session变量来传 ...
- 更改新建Asp.net WebForm的模板 的方法
C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\ItemTemplates\CSharp\Web\2052\WebFor ...
- C# 中 FindControl 方法及使用
FindControl 的使用方法 FindControl (String id): 在页命名容器中搜索带指定标识符的服务器控件.(有点类似javascript中的getElementById(st ...
- MVC和Webform的比较和替换总结
1.自定义控件,页面赋值可用HtmlHelper进行扩展 2.aspx的母版页可用Layout代替 3.webform的request,response方法在MVC中同样适应,只是类有点不同,例如表单 ...
- C#系统登录随机验证码生成及其调用方法
话不多说,直接上代码 public ValidateCode() { } /// <summary> /// 验证码的最大长度 /// </summary> public in ...
随机推荐
- picard报错
/home/yueyao/bio/anaconda2/bin/java -jar /home/yueyao/bio/anaconda2/share/picard-2.14.1-0/picard.jar ...
- [转帖]Hive学习之路 (一)Hive初识
Hive学习之路 (一)Hive初识 https://www.cnblogs.com/qingyunzong/p/8707885.html 讨论QQ:1586558083 目录 Hive 简介 什么是 ...
- CMakeLists 添加 -pthread 编译选项 undefined reference to pthread_atfork
在与 main() 函数同级的 CMakeLists 中添加如下内容(根据项目实际情况修改): cmake_minimum_required (VERSION 2.6) find_package (T ...
- CSS样式三种形式222
markdown CSS基本表现形式只有三种:标签样式.Class类样式.ID样式 标签样式: 必须与HTML标签同名.仅仅影响同名标签 Class样式:可以在任何标签中使用: class=" ...
- ~request库的使用
官方文档: (中文)http://cn.python-requests.org/zh_CN/latest/ (英文)https://2.python-requests.org//en/master/a ...
- Python 用(无脑 and 有脑)方式解决小练习
题目:企业发放的奖金根据利润提成. 利润(I)低于或等于10万元时,奖金可提10%: 利润高于10万元,低于20万元时,低于10万元的部分按10%提成, 高于10万元的部分,可提成7.5%:20万到4 ...
- PAT(B) 1077 互评成绩计算(Java)
题目链接:1077 互评成绩计算 (20 point(s)) 题目描述 在浙大的计算机专业课中,经常有互评分组报告这个环节.一个组上台介绍自己的工作,其他组在台下为其表现评分.最后这个组的互评成绩是这 ...
- .net framework 4.0 安装一直失败,错误代码0x80240037,解决
本文链接:https://blog.csdn.net/Chris_Ime/article/details/81626778 今天遇到一问题,在新电脑win7系统上安装.net framework 4. ...
- JVM内存管理(一)--GC简介
GC策略解决了哪些问题? 既然是要进行自动GC,那必然会有相应的策略,而这些策略解决了哪些问题呢,粗略的来说,主要有以下几点. 1.哪些对象可以被回收. 2.何时回收 ...
- Generator 实现
Generator 是 ES6 中新增的语法,和 Promise 一样,都可以用来异步编程 // 使用 * 表示这是一个 Generator 函数 // 内部可以通过 yield 暂停代码 // 通过 ...