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

PD0V1I

PD0V1I

2016-02-19 16:10

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

  有以下两个页面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://m.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");

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

  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.

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

  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

展开更多 50%)
分享

猜你喜欢

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

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

如何更改其它程序 ListView 控件中某个 Item 的内容

C语言教程 C语言函数
如何更改其它程序 ListView 控件中某个 Item 的内容

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

Word2018文档内容控件的巧妙使用

word
Word2018文档内容控件的巧妙使用

如何选中其他程序ListView控件中的某个Item

C语言教程 C语言函数
如何选中其他程序ListView控件中的某个Item

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

QQ圈子如何快速查找到某个圈子好友?

电脑入门
QQ圈子如何快速查找到某个圈子好友?

如何使用查找iPhone功能?

iphone iPhone 5s iPhone 6 iphone刷机
如何使用查找iPhone功能?

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

安装MySQL事务数据库(InnoDB)

安装MySQL事务数据库(InnoDB)

qq微云怎么设置密码

qq微云怎么设置密码
下拉加载更多内容 ↓