“controlname”名称在当前上下文中不存在

时间:2009-04-01 17:34:19

标签: c# asp.net visual-studio-2005 code-behind

我有一个我正在使用的Web应用程序(ASP.NET2.0 with C#,使用VS2005)。一切都很好,突然间我得到了错误:

Error 1 The name 'Label1' does not exist in the current context

每次我在页面的代码隐藏中使用控件时,

和另外43个其他类型。

这只发生在1页。就好像代码隐藏不能识别控件一样。另一件有趣的事情是,intellisense没有拿起任何控件..

我试图清理解决方案文件,删除obj文件,从项目中排除文件然后重新添加它们,关闭VS并重新启动它,甚至重新启动计算机,但这些都没有用。

18 个答案:

答案 0 :(得分:114)

我知道这是一个老问题,但我遇到了类似的问题,并希望发布我的解决方案以防其他人受益。我在学习使用时遇到了问题:

  • ASP.NET 3.5
  • C#
  • VS2008

我正在尝试创建一个支持AJAX的页面(如果您不熟悉,请查看有关使用ScriptManager对象的教程)。我试图通过C#代码访问页面中的HTML元素,我收到一条错误,指出HTML ID值的标识符“在当前上下文中不存在。”

要解决这个问题,我必须做以下事情:

<强> 1。在服务器上运行

要在C#代码中将HTML元素作为变量访问,必须在aspx文件的HTML元素标记中放置以下值:

runat="server"

Visual Studio IDE中工具箱中的某些对象在添加到页面时不会自动包含此值。

<强> 2。重新生成自动生成的C#文件:

  • 在Solution Explorer中,在aspx文件下应该有两个文件:* .aspx.cs和* .aspx.designer.cs。设计器文件是自动生成的。
  • 删除现有的* .aspx.designer.cs文件。确保只删除 设计器 文件。不要删除另一个,因为它包含页面的C#代码。
  • 右键单击父aspx文件。在弹出菜单中,选择转换为Web应用程序

现在该元素应该可以在C#代码文件中访问。

答案 1 :(得分:41)

检查文件名后面的代码和@Page指令的Inherits属性,确保它们都匹配。

答案 2 :(得分:33)

排除引用相同代码隐藏文件的任何其他页面,例如您复制并粘贴的旧页面。

答案 3 :(得分:13)

我遇到了同样的问题。事实证明,我的项目中有“MyPage.aspx”和“MyPage.aspx的副本”。

答案 4 :(得分:3)

此外,请确保您没有意外尝试继承或定义与其他文件相同(部分)类的文件。请注意,这些文件似乎与实际出现错误的文件无关!

答案 5 :(得分:1)

我遇到了同样的错误,除了它是一个WPF错误。我正在重新安排项目,并按照以下方式定义控件:

<local:CustomControl Name="Custom" /> 

在我的代码后面我尝试使用Custom.Blah,但是我收到了错误:

The name 'Custom' does not exist in the current context

我的诀窍是将我在Xaml中的控制权改为:

<local:CustomControl x:Name="Custom" />

希望这有助于那里的人!

答案 6 :(得分:1)

错过runat="server"时,通常会发生此错误。

答案 7 :(得分:1)

我通过备份当前文件(所以我仍然有我的代码),删除当前的aspx(和子页面),创建一个新文件,并将备份文件的内容复制到新文件中来修复我的项目文件。

答案 8 :(得分:1)

我在使用数据上下文进行更改后得到了同样的错误。但我遇到了一些我不熟悉的事情。我习惯手动发布我的文件。通常,当我这样做时,发布文件夹中不会出现App_Code文件夹。我开始使用VS 12发布,它直接在您的协助下发布到Web服务器。然后我得到关于预编译应用程序的错误。然后我删除它工作的app_code文件夹。但后来它给了我你得到的数据上下文错误。所以我只是删除了所有文件并再次运行发布而没有文件限制(每个文件夹和文件都将被发布)然后它就像一个魅力。

答案 9 :(得分:1)

我有同样的问题,我的问题是两个属性之间没有空格“

AutoGenerateColumns="False"DataKeyNames="ProductID"

而不是

AutoGenerateColumns="False" DataKeyNames="ProductID"

答案 10 :(得分:0)

在我的情况下,我不得不搜寻417个“找不到控件名”错误以查找实际错误:我已替换了DLL,但未更新web.config中的版本号。解决该问题并成功构建,此后3分钟,所有其他错误均已解决。

答案 11 :(得分:0)

1)检查&lt;%@ Page CodeFile =“filename.aspx.cs”中的CodeFile属性“%&gt;在“filename.aspx”页面中,您的代码隐藏文件名和此属性名称应该相同。

2)您可能会错过代码

中的runat =“server”

答案 12 :(得分:0)

就我而言,当我创建Web表单时,它被命名为WebForm1.aspx和各自的名称(WebForm1)。信,我把它重命名为别的东西。我几乎在所有地方手动重命名,但设计器文件中的一个地方仍然显示为“WebForm1&#39;”。

我也改变了这个错误。

答案 13 :(得分:0)

我遇到了同样的问题。显然,您不应该在BLL中调用与.aspx / .aspx.cs文件之一相同的类。我认为它们不会在同一范围内等等,但它与Visual Studio的内部工作方式相差甚远。我有点惊讶,如果要产生那种类型的错误,没有什么可以阻止你做这件事。无论如何,只需删除.aspx / .aspx.cs文件并重建您的项目。然后用另一个名字把它们带回来。如果您不想重新输入代码,可以将代码复制/粘贴到另一个编辑器中。

答案 14 :(得分:0)

我有同样的错误消息。我的代码没有错误并且工作正常,然后我决定返回并重命名我的一个按钮,突然它给了我一个编译错误,伴随着那个蓝色波浪形下划线说控制在当前上下文中不存在...

事实证明Visual Studio很愚蠢,因为问题与我的aspx.cs类备份文件有关。我删除了那些,错误就消失了。

答案 15 :(得分:0)

从数据列表转换后,使用Repeater进行调整时遇到了类似的问题。

问题是我在删除不需要的属性时意外地联合了2个属性。

<asp:Repeater runat="server" ID="ClientsRP"DataSourceID="ClientsDS">
    .
    .
    .
</asp:Repeater>

这阻止了在设计文件中生成转发器。

答案 16 :(得分:0)

我遇到了同样的问题,因为我想从visual studio 2010项目中重新生成aspx文件,所以控件有clientidmode =&#34; Static&#34;属性。当它被删除它解决了。

答案 17 :(得分:0)

上面提供的解决方案选项#2适用于Windows窗体应用程序,而不适用于web aspx应用程序。我在Web应用程序中遇到了类似的错误,我通过删除一个文件来解决这个问题,我使用相同名称的用户控件,这个aspx文件实际上是一个备份文件,并且在过程中没有被引用,但它仍然导致错误,因为在备份文件上注册的用户控件的名称在进程流中引用的aspx文件中的名称完全相同。所以我删除了备份文件并构建了解决方案,构建成功。

希望这对类似场景中的某人有所帮助。

Vijaya Laxmi。