Page.FindControl();//方法,获取服务器控件
Page.Request.Form[];//属性,获取变量集合
FindControl是查找Page中指定ID的服务器控件,即:带有runat=“server”的控件(注意:服务器端的控件包括:(1)Asp.net服务控件(asp.net里自带的),(2)html服务器控件(即:input标签runat=“server”))
在进行asp.net服务控件和html服务控件强制转换的时候,一定不要搞错了,是有区别的,(笔者吃过亏),代码如下:
前台代码:
<form id="form1" runat="server">
<div>
<input
type="text" id="Text_Nav" runat="server" value="Html服务器控件"
/>
<asp:TextBox ID="TextBox1"
runat="server" Text="ASp.net控件"></asp:TextBox>
<input type="button" runat="server" value="添加控件"
onserverclick="LoadNewControl" />
<input type="button"
runat="server" value="读取数据" onserverclick="LoadData" />
<label
runat="server" id="Lab_Name"></label>
<asp:Label ID="Lab_Name2"
runat="server"></asp:Label>
</div>
</div>
</form>
后台代码:
protected void LoadData(object sender, EventArgs e)
{
//this.Lab_Name.InnerText = Request.Form["Tb_NavName"];
//也可以
this.Lab_Name2.Text =
((TextBox)this.form1.FindControl("TextBox1")).Text;
this.Lab_Name.InnerText =
((HtmlInputText)this.form1.FindControl("Text_Nav")).Value;
}
Request.Form是获取提交来的表单中具有name属性的项(PostBack后的控件),本人测试:在后台添加服务器端的控件并且设置上ID之后,可以用这个ID进行查找。
前台代码端:
<div id="Div_Menu" runat="server">
<div id="Div_NewPwd"
runat="server">
</div>
<asp:Button
ID="Btn_UpdatePwd" runat="server" Text="修改密码" OnClick="UpdatePwd" /><br
/>
</div>
后台代码段:
/// <summary>
/// 重置密码
/// </summary>
/// <param name="sender"></param>
/// <param
name="e"></param>
protected void UpdatePwd(object sender,
EventArgs e)
{
if (this.Btn_UpdatePwd.Text !=
"确认重置")
{
Label Lab_Pwd = new Label();
Lab_Pwd.Text = "请输入新密码:";
TextBox Tb_pwd = new TextBox();
Tb_pwd.ID =
"Tb_NewPwd";
Tb_pwd.TextMode = TextBoxMode.Password;
this.Div_NewPwd.Controls.Add(Lab_Pwd);
this.Div_NewPwd.Controls.Add(Tb_pwd);
this.Btn_UpdatePwd.Text = "确认重置";
return;
}
string newPwd2 = Request.Form["Tb_NewPwd"];//解决
/*string
newPwd = ((TextBox)this.Div_NewPwd.FindControl("Tb_NewPwd")).Text.Trim();***报错
*
错误原因分析:这个Div_NewPwd容器控件在页面加载的时候里边是空的(并没有ID=“Tb——NewPwd”的控件)
*
NewPwd控件这是在后来动态添上去的,而在单击页面上的有回调的控件的时候(如button)时这个页面用进行了
*
重新的Load事件(也就是说又回到了之前页面刚加载完毕的状态,即Div_NewPwd控件内为空),
*
网上查阅资料得解决方案:重写Load()加载事件。
Page.FindControl与Page.Form的区别,布布扣,bubuko.com
原文:http://www.cnblogs.com/zhzhjieke/p/3583933.html