无法访问控制在Page_Load中

问题描述:

我有一个简单的.ascx文件无法访问控制在Page_Load中

<%@ 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以及相同的结果!

+0

请给出定义testDiv的代码。 – 2010-01-11 10:48:06

+0

你可以发布aspx页面代码吗? – 2010-01-11 10:48:25

+0

你在用什么语言工作? asp.net 1.1? 2.0+? – 2010-01-11 10:55:23

如果你有一个HTML DIV,你需要添加一个runat属性像

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

HTML元素如div的不是ASP.NET控件虽然和混合HTML“控制”与ASP.NET可能会出现问题。您可能更愿意做这样的事情

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

更新:还要检查Profile.ascx.designer.cs这应该是自动生成由Visual Studio包含“保护HTMLControl时testdiv”。我认为这是从部分类缺失。我注意到你从UserControls_Profile派生,这可能会造成混淆。

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

只要<div>不在动态模板中,例如Repeater,这应该可以工作。

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

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

如果你的DIV是一个模板的一部分,你将需要使用container.FindControl("testdiv")

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

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