• Page.FindControl与Page.Form的区别


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

    希望能多多交流,欢迎指正……
  • 相关阅读:
    Dede 自定义频道解析
    没有什么想说的,但既然来了,也就留下一句
    Title和META标签参数详解,SEO优化中的title和META标签的重要性
    Jsoup HTML 解析器 用法介绍
    php 相关方面内容、
    Html.ActionLink Url.Action的用法
    Asp.Net MVC2.0 Url 路由入门实例篇
    asp.net mvc 在View中获取Url参数的值
    SSH2实现数据库和界面的分页
    struts2中的ModelDriven使用
  • 原文地址:https://www.cnblogs.com/zhzhjieke/p/3583933.html
Copyright © 2020-2023  润新知