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


79

我正在使用一个Web应用程序(带有VS2005的C#ASP.NET2.0)。一切工作正常,突然我得到了错误:

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

以及我每次在页面代码背后使用控件时的其他43种。

这仅发生在1页上。好像后面的代码无法识别控件。另一个有趣的事情是,智能感知也没有选择任何控件。

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


2
正确的答案是在这里找到答案:stackoverflow.com/a/1981228/168703
JonH '02

1
有时,在重命名aspx页面后,有时还要在designer.cs中检查名称空间,而名称空间仅从designer.cs中删除。
Ashraf Abusada '17

从其他.aspx文件复制控件的标记后,可能会发生这种情况。我删除了复制的标记,并手动编写了控件标记,但错误消失了。
Milind Bankar

Answers:


48

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


1
那也对我有用!一个名称空间是错误的,当我在@Page指令中对其进行更正时,错误就消失了。
之东

1
此处相同,但有少量补充:确保您正在检查它是否具有完全限定的类名称。由于某种原因,VS在需要为“ MyNamespace.KioskB”时将其更改为Inherits =“ KioskB”。看起来不错,直到我将标记与另一页进行比较,并注意到名称空间部分已消失。
凯文

117

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

  • ASP.NET 3.5
  • C#
  • VS2008

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

为了解决这个问题,我必须执行以下操作:

1.在服务器上运行

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

runat="server"

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

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

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

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


2
右键单击“转换为Web应用程序”选项在文件夹和项目上也可用。
Dana Benson

9
当我今天遇到这个问题时,选项2是我解决此问题的完美答案!
MikeScott8

19
FYI在Visual Studio 2013中,“转换为Web应用程序”选项已经移到项目菜单:stackoverflow.com/questions/19561982/...
马克·纽金特

1
删除并重新创建设计器文件对我
有用

3
使用“项目”菜单可以正常工作。注意:.aspx文件的<%@ Page标记应使用'Codebehind'而非'Codefile'–
KR

34

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


或将“ Label1”元素复制到其他页面。
mathijsuitmegen

14

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


3

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


1

我遇到了同样的错误,只是它是WPF错误。我正在重新排列项目,并具有如下定义的控件:

<local:CustomControl Name="Custom" /> 

在后面的代码中,我尝试使用Custom.Blah,但出现错误:

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

对我来说,诀窍是将Xaml中的控件更改为:

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

希望这可以帮助某人!


1

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


1

我遇到了同样的问题,我的问题是两个属性之间没有空格”

AutoGenerateColumns="False"DataKeyNames="ProductID"

代替

AutoGenerateColumns="False" DataKeyNames="ProductID"

1

我通过备份当前文件(所以我仍然有我的代码),删除当前的aspx(和子页面),制作了一个新文件并将备份文件的内容复制到新文件中,从而解决了这个问题。



0

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

希望这对类似情况的人有所帮助。

Vijaya Laxmi。


0

我遇到了同样的问题,因为我想从Visual Studio 2010项目中重新生成aspx文件,因此控件具有clientidmode =“ Static”属性。删除后,此问题已解决。


0

从DataList转换为Repeater后,我遇到了类似的问题。

问题是在删除不需要的属性时,我不小心合并了2个属性。

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

这就阻止了在设计文件中生成中继器。


0

我有同样的错误信息。我的代码没有错误并且运行良好,然后我决定返回并重命名我的一个按钮,突然它给了我一个编译错误,并带有蓝色的弯曲下划线,表示该控件在当前上下文中不存在。

事实证明,Visual Studio有点笨,因为问题与我为aspx.cs类制作的备份文件有关。我删除了这些,错误消失了。


0

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


0

就我而言,当我创建Web表单时,它被命名为WebForm1.aspx,并分别命名为(WebForm1)。信,我将其重命名为其他名称。我几乎在所有位置都手动重命名,但是在设计器文件中的一个位置仍将其显示为“ WebForm1”。

我也改变了它,摆脱了这个错误。


0

1)检查“ filename.aspx”页面中<%@ Page CodeFile =“ filename.aspx.cs”%>中的CodeFile属性,文件名后面的代码与该属性名称应该相同。

2)您可能会错过代码中的runat =“ server”


0

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.