"controlname"这个名称在当前上下文中不存在。

80

我正在开发一个Web应用程序(使用Visual Studio 2005, ASP.NET 2.0和C#),一切都很顺利,但突然间我遇到了这个错误:

Error 1 当前上下文中不存在 'Label1' 的名称

我在代码后台页面中使用控件的每一次都会提示类似的43个错误。

这只是针对其中一个页面。好像代码后台页面无法识别控件。另一个有趣的事情是 IntelliSense 也没有捕捉到任何控件。

我尝试过清理解决方案文件、删除 obj 文件、从项目中排除文件再重新添加它们、关闭 Visual Studio 并重新启动它,甚至重启电脑,但这些方法都没有奏效。


1
有时在重命名aspx页面后,设计者.cs中的名称空间会被简单地删除。请确保检查设计者.cs中的名称空间。 - Ashraf Sada
这可能发生在从其他.aspx文件复制控件标记后。我删除了复制的标记并手动编写了控件标记,错误消失了。 - Milind Bankar
18个回答

122

我知道这是一个旧问题,但我遇到了类似的问题,并想发布我的解决方案,以便为其他人提供帮助。当我学习使用以下技术时遇到了该问题:

  • ASP.NET 3.5
  • C#
  • VS2008

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

要解决这个问题,我需要执行以下步骤:

1. 在服务器上运行

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

runat="server"

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

2. 重新生成自动生成的 C# 文件:

  • 在“解决方案资源管理器”中,aspx 文件下应该有两个文件:*.aspx.cs 和 *.aspx.designer.cs。设计文件是自动生成的。
  • 删除现有的 *.aspx.designer.cs 文件。确保只删除 设计者 文件。不要删除其他文件,因为它包含页面的 C# 代码。
  • 右键单击父 aspx 文件或项目菜单。在弹出菜单中,选择 转换为 Web 应用程序

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


48

检查 @Page指令中的代码文件名称和Inherits属性,确保它们两者匹配。


1
同样的问题,只是有一个小细节需要注意:确保你检查了它的完全限定类名。由于某种原因,VS将我的更改为Inherits="KioskB",而实际上应该是"MyNamespace.KioskB"。在我将标记与另一个页面进行比较并注意到命名空间部分已经消失之前,它看起来是正确的。 - Kevin

34

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


请将“Label1”元素复制到另一页。 - mathijsuitmegen

14

我遇到了同样的问题。结果发现在我的项目中既有"MyPage.aspx",也有"Copy of MyPage.aspx"。


3

另外,请确保您没有任何文件意外尝试继承或定义与其他文件相同(部分)类。请注意,这些文件可能与实际出现错误的文件看起来无关!


1
我遇到了同样的问题,我的问题是两个属性之间没有空格。
AutoGenerateColumns="False"DataKeyNames="ProductID"

代替

AutoGenerateColumns="False" DataKeyNames="ProductID"

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

1

我在项目中通过备份当前文件(以便保留我的代码),删除当前的aspx文件(及其子页面),创建一个新的文件,并将备份文件的内容复制到新文件中来实现了修复。


1
这个错误经常发生在你缺少runat="server"时。

1
我遇到了同样的错误,只不过是一个WPF错误。我正在重新排列项目,并且有一个控件定义如下:
<local:CustomControl Name="Custom" /> 

在我的代码后台中,我尝试使用Custom.Blah,但是我遇到了错误:
The name 'Custom' does not exist in the current context

我的解决方法是将Xaml中的控件更改为以下内容:
<local:CustomControl x:Name="Custom" />

希望这能帮助到某个人!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接