发文章
发文工具
撰写
网文摘手
文档
视频
思维导图
随笔
相册
原创同步助手
其他工具
图片转文字
文件清理
AI助手
留言交流
MSDN上解释Page.FindControl(string id)方法用于查找指定ID的控件。例如:
<asp:TextBox id=
"Email"
runat=
"server"
></asp:TextBox>
TextBox txt =
this
.Page.FindControl(
)
as
TextBox;
txt.Text =
"abc@163.com"
;
该方法有点类似javascript中的getElementById(string)。但实际上,经过试验发现id这个参数并不是TextBox控件的ID,而是TextBox控件生成HTML代码后的name属性。如下代码:
<asp:TextBox id="TextBox1" runat="server"></asp:TextBox>
其生成的HTML代码为:
<input name="TextBox1" type="text" id="TextBox1" />
我们看到,在默认情况下,控件TextBox的id属性对应生成后的input标签的id属性和name属性(id == name)。当有母版页存在的时候,情况就变得不一样了。当出现如下模板页时:
<asp:ContentPlaceHolder ID="BodyContent" runat="server"></asp:ContentPlaceHolder>
"RealName"
生成的HTML变为了:<input name="ctl00$BodyContent$RealName" type="text" id="BodyContent_RealName" />
此时我们使用this.Page.FindControl("RealName"),系统会返回null。我们逐一尝试,this.Page.FindControl("BodyContent_RealName"),系统仍旧返回null。this.Page.FindControl("ctl00$BodyContent$RealName"),OK,正常了,天下太平了。
通过以上调试过程,我们发现Page.FindControl(string id)方法的id参数实质上是控件生成HTML代码后的name属性。默认情况下(没有模板页时),控件的ID属性会同时赋值给控件生成的对应html的标签的name和id属性。所以,此时Page.FindControl(string id)方法的id参数只要输入控件的ID属性即可。否则则需要输入控件生成HTML标签后的name属性。
通过如上代码,我们还发现在使用模板页时,控件的生成HTML标签后,对应的ID属性也变了,由"RealName"变为了"BodyContent_RealName"(模板页对应区域的ID+"_"+控件原来的ID)。无疑,这种ID不是很友好,给模板页的ContentPlaceHolder控件增加ClientIDMode="Static"属性后,可以解决这一问题:
<asp:ContentPlaceHolder ID=
"BodyContent"
ClientIDMode=
"Static"
></asp:ContentPlaceHolder>
<asp:TextBox id="RealName" runat="server"></asp:TextBox>
<input name="ctl00$BodyContent$RealName" type="text" id="RealName">
我们发现,增加如上属性后,生成的HTML标签中,id属性保持了不变,但是name属性仍旧不太友好,聊胜于无吧,毕竟大多数时候我们使用js时都是使用getElementById(string)而不是使用getElementByTagName(string)
来自: 昵称10504424 > 《工作》
0条评论
发表
请遵守用户 评论公约
母版页和内容页的数据传递 .
将FindControl方法例子中的MasterPage.master更改如下:< %@ Master Language="C#" AutoEventWireup="true" CodeFile="MasterPage1.master.cs" Inherits="Maste...
访问用户控件
访问用户控件访问用户控件中的textbox,label等的值1.最好是在控件里增加一个public的属性访问 public string name //name为属性名,自己起名{然后label.Text = 用户控件ID.name或 用户控件ID.name =la...
ASP.NET2.0中用Gridview控件操作数据
ASP.NET2.0中用Gridview控件操作数据。<asp:TemplateField> <ItemTemplate> <asp:Label ID="CompanyNameLabel" Runat="Server"><%# Eval("CompanyName")...
[转]asp.net 母版页使用详解 - 墨艺的日志 - 网易博客
一、在母版页中编写后台代码,访问母版页中的控件: 与普通的aspx页面一样,双击按钮即可编写母版页中的代码 二、在内空页面中编...
如何在前台的HTML标记中获取后台的变量
如何在前台的HTML标记中获取后台的变量第一种方法(用服务器端控件):前台:<asp:TextBox ID="TextBox2" runat="server" Text=''<%# myName %>''><...
ASP.NET开发:表单详解
指令可以为两个互斥属性之一:VirtualPath 或 TypeName.VirtualPath指提交页的URL,TypeName则指明调用页的类型.PreviousPageType指令使目标页PreviousPage属性返回给定路径上的页面相同类型(或者TypeNam...
[翻译]你或许还为听说过的一些ASP.NET 2.0要诀 - 从这里开始出发....——lxinxuan‘s Blog - 博客园
If you have a page called Default.aspx that exposes a publicproperty that returns a Textbox that is defined in the page, the pagethat data is posted to (lets call it SearchResults.aspx) c...
asp.net读取GridView中某行或某单元格值
asp.net读取GridView中某行或某单元格值TextBox10.Text = GridView1.Rows[e.NewSelectedIndex].Cells[0].Text;试试 谢谢阿多的回答,试过了,一样的结果.本来Text就可以省略掉的吧...up单元格里是不是还...
.net之Datalist控件
<asp:DataList ID="DataList1" runat="server" DataKeyField="Id" DataSourceID="AccessDataSource1" OnItemCommand="DataList1_ItemCommand...
微信扫码,在手机上查看选中内容