如何使用FindControl查找内容页上的某个控件?
2008-04-24 04:10
381 查看
有以下两个页面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;
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.
所以以上的代码应该改成:
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
<!-- 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;
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.
所以以上的代码应该改成:
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
相关文章推荐
- 如何使用FindControl查找内容页上的某个控件?
- 如何使用FindControl查找内容页上的某个控件?
- 如何使用FindControl查找内容页上的某个控件?
- 如何使用FindControl查找内容页上的某个控件?
- 如何使用FindControl查找内容页上的某个控件?
- 如何使用FindControl查找内容页上的某个控件
- 在使用了母版页的内容页后,如何在javascript中调用服务器控件值
- 使用了母版页的内容页中,如何在JavaScript中调用Html Input(Hidden)控件
- 从寻找资源的习惯上谈如何获得好的代码及控件(使用Koders查找)
- 【转载】在使用了母版页的内容页后,如何在javascript中调用服务器控件值
- 使用通有事件过程,如何查找事件产生的控件
- 在使用了母版页的内容页后,如何在javascript中调用服务器控件值
- [专贴]在使用了母版页的内容页后,如何在javascript中调用服务器控件值
- (一)关于SWT程序的基本架构,如何使用控件以及使用Image,Font,Color等图形资源内容
- [VB.NET]请问题如何使用 正值表达式 来控制使用者Textbox控件输入内容?
- 获取iframe中的内容、查找获取指定元素(关于用c++调用WEBBROWSER控件,使用相关接口操作web页面元素的一些方法)
- 在使用了母版页的内容页内查找控件
- 在使用了母版页的内容页后,如何在javascript中调用服务器控件值
- 从寻找资源的习惯上谈如何获得好的代码及控件(使用Koders查找)
- 从寻找资源的习惯上谈如何获得好的代码及控件(使用Koders查找)