FindControl无法找到控件

时间:2012-08-09 14:31:50

标签: c# asp.net web-services web-applications

我的FindControl功能有问题。问题如下:

ASPX:

<asp:Content ID="MainContent" ContentPlaceHolderID="MainContent" runat="server">
  <ajaxToolkit:ToolkitScriptManager ID="ToolkitScriptManager1" runat="server">
  </ajaxToolkit:ToolkitScriptManager>

  <table class="inputTable">
            <tr><td>
                <asp:CheckBox ID="Extern" AutoPostBack="True" OnCheckedChanged="OnCheckedChangedMethod" runat="server" />
                </td><td>Externes Unternehmen</td></tr>
    <tr>         
        <td>
            <asp:TextBox ID="Firmierung" runat="server"></asp:TextBox>
            <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" 
                ControlToValidate="Firmierung" Display="Dynamic" 
                ErrorMessage="RequiredFieldValidator"
                Text="Bitte geben Sie die Firmierung ein."></asp:RequiredFieldValidator>                
        </td>
    </tr>
  </table>  

aspx.cs:

protected void OnCheckedChangedMethod(object sender, EventArgs e)
    {            
        if (Extern.Checked)
        {                
            Control ctr = FindControl("RequiredFieldValidator1");                
            if (ctr != null)
            {
                ctr.Visible = false;
            }
        }
        else
        {                
        }
    }

但是FindControl没有用,它找不到那个控件。我在任何时候都错了吗? 提前谢谢。

2 个答案:

答案 0 :(得分:4)

ASP.NET会为您创建一个字段,因为它位于您网页中的Contentthis.RequiredFieldValidator1内。

FindControl方式就是这样(在母版页的内容面板中找到它):

Control ctr = Master.FindControl("MainContent")
    .FindControl("RequiredFieldValidator1");

答案 1 :(得分:1)

根据您的有限来源,您应该能够将代码隐藏方法简化为:

protected void OnCheckedChangedMethod(object sender, EventArgs e)
{            
    this.RequiredFieldValidator1.Visible = this.Extern.Checked;
}

不需要使用FindControl()。

当您键入“this。”时,如果您没有看到您的intellisense中出现RequiredFieldValidator1,并假设您使用的是ASP.NET 2.0或更高版本,请检查您的VS.NET警告以查看您的.aspx是否有警告带有关联的“设计器文件生成失败”的消息。如果是这样,您必须更正警告。