如何使用FindControl查找内容页上的某个控件?

2016-02-19 16:10 74 1 收藏

下面,图老师小编带您去了解一下如何使用FindControl查找内容页上的某个控件?,生活就是不断的发现新事物,get新技能~

【 tulaoshi.com - Web开发 】

  有以下两个页面Default.aspx和Result.aspx,代码如下:
  !-- Default.aspx --
  %@ Page Language="C#" AutoEventWireup="true" MasterPageFile="~/Default.master"  CodeFile="Default.aspx.cs" Inherits="_Default" %
  asp:Content ID="Content1" runat="server" ContentPlaceHolderID="ContentPlaceHolder1"
       asp:Label ID="Label1" runat="server" Text="Please input a string here"/asp:Label
      asp:TextBox ID="TextBox1" runat="server"/asp:TextBox
      asp:Button ID="Button1" runat="server" Text="Button" PostBackUrl="~/Result.aspx" //asp:Content

  //Default.aspx.cs
  using System;
  using System.Data;
  using System.Configuration;
  using System.Web;
  using System.Web.Security;
  using System.Web.UI;
  using System.Web.UI.WebControls;
  //using System.Web.UI.WebControls.WebParts;
  using System.Web.UI.HtmlControls;

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/webkaifa/)

  public partial class _Default : System.Web.UI.Page
  {
      protected void Page_Load(object sender, EventArgs e)
      {
      }
  }
   

  !-- Result.aspx --
  %@ Page Language="C#" MasterPageFile="~/Default.master" AutoEventWireup="true" CodeFile="Result.aspx.cs" Inherits="Result" Title="Untitled Page" %
  asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server"
      asp:Label ID="Label1" runat="server" Text="The string you input in the previous page is"/asp:Label
      asp:TextBox ID="TextBox1" runat="server"/asp:TextBox
  /asp:Content
  //Result.aspx.cs
  using System;
  using System.Data;
  using System.Configuration;
  using System.Collections;
  using System.Web;
  using System.Web.Security;
  using System.Web.UI;
  using System.Web.UI.WebControls;
  using System.Web.UI.WebControls.WebParts;
  using System.Web.UI.HtmlControls;

  public partial class Result : System.Web.UI.Page
  {
      protected void Page_Load(object sender, EventArgs e)
      {
          if (PreviousPage != null)
          {
              TextBox tb = (TextBox)PreviousPage.FindControl("TextBox1");
              if (tb != null)
                  TextBox1.Text = tb.Text;
          }
      }
  }
   

  这两个页面都指定了MasterPageFile属性。因为该MasterPage中的内容无关紧要,就不列出来了。在Default.aspx上有两个控件:TextBox1用于接受用户的输入,Button1用于提交页面,其PostBackUrl指向Result.aspx。在Result.aspx.cs的Page_Load方法中尝试在TextBox1中显示用户在前一页面的TextBox1中输入的字符串。当执行以下语句时:

  TextBox tb = (TextBox)PreviousPage.FindControl("TextBox1");

  tb的值为null。将以上语句更改为如下代码:

  Content con = (Content)PreviousPage.FindControl("Content1");
  if (con == null)
      return;

  TextBox tb = (TextBox)con.FindControl("TextBox1");

  但con的值为null,这样后续的语句也不可能执行了。问题出在哪里呢?

  经过一番搜索,在forums.asp.net中找到了答案,以下引用的是bitmask的说法:
  ...becasue the Content controls themselves dissapear after the master page rearranges the page. You can use the ContentPlaceHolders, or the form on the MasterPage if there are no INamingContainers between the form and the control you need.

  
  所以以上的代码应该改成:

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/webkaifa/)

  TextBox tb = (TextBox)PreviousPage.Master.FindControl("ContentPlaceHolder1").FindControl("TextBox1");

  bitmask还在他的博客上写了一篇文章来阐述FindControl方法和INamingContainers接口:
  http://www.odetocode.com/Articles/116.aspx

  http://movingboy.cnblogs.com/archive/2006/07/06/444690.html

来源:https://www.tulaoshi.com/n/20160219/1611213.html

延伸阅读
使用 DataGrid 控件 DataGrid 控件是一种类似于电子数据表的绑定控件,可以显示一系列行和列来表示 Recordset 对象的记录和字段。可以使用 DataGrid 来创建一个允许最终用户阅读和写入到绝大多数数据库的应用程序。DataGrid 控件可以在设计时快速进行配置,只需少量代码或无需代码。当在设计时设置了DataGrid 控件的 DataSource 属性...
按钮控件的使用 作者:杜修杏 下载本文示例代码 最近有不少朋友发信到我的邮箱,其中有高手也有菜鸟,也许他们问的问题我还不能一一解答,但是他们的来信的确让我感受到极大的鼓舞。今天忙里偷闲,翻译了一片外国的文章,献给那些摸索中的菜鸟们。 下面将通过一个最简单的程序来说明Windows的...
标签: Web开发
在很多的主题中都有不止一个CSS文件,这样主要是为了适应不同的浏览器,因为他们在对CSS解释上有些不同。 但有没有想过为某个页面单独使用一个CSS样式表? 首先打开header.php文件,找到如下代码: link rel="stylesheet" href="?php bloginfo('stylesheet_url'); ?" type="text/css" media="screen" / 比如要在某个分类页面使用...
微信收藏的内容怎么查找?   如何查找收藏过的东西呢,我们先在微信界面,找到我,然后找到我的收藏点击进去,在最上角的地方输入你要搜索的东西,如图,我们搜索电脑辐射点击搜索,搜索结果就出来了  
使用DataGrid控件 DataGrid控件是一种类似于电子数据表的绑定控件,可以显示一系列行和列来表示Recordset对象的记录和字段。可以使用DataGrid来创建一个允许最终用户阅读和写入到绝大多数数据库的应用程序。DataGrid控件可以在设计时快速进行配置,只需少量代码或无需代码。当在设计时设置了DataGrid控件的DataSource属性后,就会用...

经验教程

655

收藏

37
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部