无法访问Page_Load中的控件

时间:2010-01-11 10:46:12

标签: c# asp.net web-applications user-controls

我有一个简单的.ascx文件

<%@ Control Language="C#"
    AutoEventWireup="true"
    CodeFile="Profile.ascx.cs"
    Inherits="UserControls_Profile" %>
<%@ Register Assembly="RadChart.Net2"
    Namespace="Telerik.WebControls"
    TagPrefix="radC" %>
<div id="testdiv" runat="server"></div>
代码背后的

protected void Page_Load(object sender, EventArgs e) {
  Chart();
}

private void Chart() {
  testdiv.Visible=false;
}

当我尝试访问该页面时,我得到了例外:

  

错误CS0103:当前上下文中不存在名称“testdiv”

我也试过onload但结果相同!

4 个答案:

答案 0 :(得分:4)

如果您有HTML div,则需要添加类似

的runat属性
  <div id="testDiv" runat="server">Hello world</div>

像div这样的HTML元素不是ASP.NET控件,将HTML“控件”与ASP.NET混合可能会有问题。您可能更愿意做类似

的事情
  <asp:panel id="myPanel" runat="server">Hello world</asp:panel>

更新:还要检查Profile.ascx.designer.cs,它应由Visual Studio自动生成,以包含“protected HtmlControl testdiv”。我假设部分类中缺少这个。我注意到你派生于UserControls_Profile,这可能导致混淆。

答案 1 :(得分:0)

有一件事,testdiv是一个asp.net控件???必须在.cs文件或具有此用户控件的部分类的其他文件中将此控件声明为受保护。另外,testdiv必须在ascx文件中有runat =“server”。如果你有这些东西,你可以访问你的控件。

答案 2 :(得分:0)

这应该有用,只要<div>不在动态模板中,例如转发器。

检查您的页面模板。它应该包含这样的内容:

<div id="testdiv" runat="server">
   ...
<div>

如果您的div是模板的一部分,则需要使用container.FindControl("testdiv")

编辑:有时,Visual Studio未正确更新Profile.ascx.designer.cs。在这种情况下,重新保存ASCX文件似乎也不起作用。尝试添加具有其他名称的ASP.NET控件。 通常会触发代码的重生。

答案 3 :(得分:0)

在.cs中,右键单击testdiv上方,然后选择“转到定义”。如果未找到结果,请在设计模式下打开.ascx并保存文件。这应该在ascx中生成testdiv控件的声明。