首页 > 技术文章 > Page.FindControl与Page.Form的区别

zhzhjieke 2014-03-06 10:24 原文

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()加载事件。

推荐阅读