【问题标题】:FindControl can't find a controlFindControl 找不到控件
【发布时间】:2012-08-06 19:34:16
【问题描述】:

我对 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 不起作用,它找不到那个控件。我在任何时候都错了吗? 提前致谢。

【问题讨论】:

  • 只是出于好奇;既然您的RequiredFieldValidator 上有runat="server",为什么不能直接在代码隐藏中引用它?
  • @Jim B:是的,你是对的,我只是忘记了。现在它完美地工作了。谢谢

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


【解决方案1】:

ASP.NET 为您创建一个字段,因为它位于您页面中的 Content: this.RequiredFieldValidator1 内。

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

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

【讨论】:

  • 您好,谢谢 Mudu,现在可以和 Master 一起使用了。但我选择了下面Shan的解决方案,很简单。谢谢
  • 不客气。是的,我也建议你这样做,Shan 的解决方案更安全。
  • 谢谢你,伙计。我想知道为什么没有人在解释如何使用 FindContro() 时不考虑母版页的使用。再次感谢您。
【解决方案2】:

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

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

应该不需要使用 FindControl()。

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

【讨论】:

  • 谢谢Shan,我只是忘了我可以直接调用它作为参考。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-05-06
  • 1970-01-01
  • 2010-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多