none
关于Wizard.FindControl()的问题 RRS feed

  • 问题

  •  

    我想访问Wizard控件HeaderTemplate模板中的TextBox控件(id=TextBox1),因此就想到利用Wizard.FindControl方法:

     

    TextBox ab = (TextBox)Wizard1.FindControl("TextBox1");

     

    可是直到运行期间才发现,变量ab的值竟然是null,根本就没有取得TextBox控件,我实在是不明白究竟是是为什么,还望高手赐教!!

     

    以下是源代码:

     

    .aspx:

    Code Snippet

    <%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" Debug="true"%>

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

    <html xmlns="http://www.w3.org/1999/xhtml" >
    <head runat="server">
        <title>无标题页</title>
    </head>
    <body>
        <form id="form1" runat="server">
            &nbsp;
            &nbsp;&nbsp;<br />
            <br />
            <asp:Wizard ID="Wizard1" runat="server" ActiveStepIndex="0" HeaderText="sdfsdfsdf'" Width="411px">
                <WizardSteps>
                    <asp:WizardStep runat="server" Title="Step 1">

                    </asp:WizardStep>
                    <asp:WizardStep runat="server" Title="Step 2">
                    </asp:WizardStep>
                </WizardSteps>
                <HeaderTemplate>
                   
                    <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
                </HeaderTemplate>
               
            </asp:Wizard>
       
        </form>
    </body>
    </html>

     

     

     

    .aspx.cs:

    Code Snippet

    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)
        {
            TextBox ab = (TextBox)Wizard1.FindControl("TextBox1");
            if (ab != null)
            {
                ab.Text = "这是输入的一些代码..........................";
            }

            else
            {
                Response.Write("null!!");
            }
        }

        protected void Page_PreRender(object sender, EventArgs e)
        {


        }
    }

     

     

    2008年2月3日 5:27

答案

  • 这是,客户端生成的代码的一部分


                    <input name="ctl00$LeftContent$Wizard1$HeaderContainer$TextBox1" type="text" value="TestData" id="ctl00_LeftContent_Wizard1_HeaderContainer_TextBox1" />

     

    可以看到ctl00$LeftContent$Wizard1$HeaderContainer$TextBox1中的TextBox1的位置。在Wizard1HeaderContainer中,

    FindControl方法一般搜索一层(个人看法)。而Wizard1的子控件中并未包含TextBox1。所以呢,没有找到。

     

     

    2008年3月14日 5:59

全部回复

  • 在下拙见:

    TextBox ab = (TextBox)Wizard1.FindControl("TextBox1");
    改为
    TextBox ab = (TextBox)Wizard1.FindControl("HeaderContainer").FindControl("TextBox1");
    2008年2月10日 13:58
  • 请问以下“headercontainer”是什么??我并没有定义这个ID。

    2008年3月11日 1:13
  • 这是,客户端生成的代码的一部分


                    <input name="ctl00$LeftContent$Wizard1$HeaderContainer$TextBox1" type="text" value="TestData" id="ctl00_LeftContent_Wizard1_HeaderContainer_TextBox1" />

     

    可以看到ctl00$LeftContent$Wizard1$HeaderContainer$TextBox1中的TextBox1的位置。在Wizard1HeaderContainer中,

    FindControl方法一般搜索一层(个人看法)。而Wizard1的子控件中并未包含TextBox1。所以呢,没有找到。

     

     

    2008年3月14日 5:59
  • 学习.NET八个月之后,再看看这个帖子,我才意识到我提问了一个多么幼稚的问题。
    2008年10月18日 9:05