当前上下文中不存在名称“controlname”
Posted
技术标签:
【中文标题】当前上下文中不存在名称“controlname”【英文标题】:The name 'controlname' does not exist in the current context 【发布时间】:2010-10-16 22:28:03 【问题描述】:我正在开发一个 Web 应用程序(使用 C# 的 ASP.NET2.0,使用 VS2005)。一切正常,突然间我得到了错误:
Error 1 The name 'Label1' does not exist in the current context
每次我在页面的代码隐藏中使用控件时,还有 43 个其他同类。
这只发生在 1 页。就好像代码隐藏没有识别控件。另一个有趣的事情是智能感知也没有选择任何控件..
我尝试清理解决方案文件,删除obj文件,从项目中排除文件然后重新添加它们,关闭VS并重新启动它,甚至重新启动我的计算机,但这些都没有奏效。
【问题讨论】:
正确答案在这里找到的答案:***.com/a/1981228/168703 还要检查designer.cs中的命名空间,有时在重命名一个aspx页面后,命名空间只是从designer.cs中删除。 从其他 .aspx 文件复制控件标记后可能会发生这种情况。我删除了复制的标记并手动编写了控制标记,错误消失了。 【参考方案1】:检查 @Page 指令上文件名和 Inherits 属性后面的代码,确保它们都匹配。
【讨论】:
这对我也有用!命名空间错误,当我在 @Page 指令中更正它时,错误消失了。 这里相同,但有一点补充:确保您正在检查它是否具有完全限定的类名。出于某种原因,当需要“MyNamespace.KioskB”时,VS 将我的更改为 Inherits="KioskB"。它看起来是正确的,直到我将标记与另一个页面进行比较并注意到名称空间部分已消失。【参考方案2】:排除引用相同代码隐藏文件的任何其他页面,例如您复制和粘贴的旧页面。
【讨论】:
或将“Label1”元素复制到其他页面。【参考方案3】:我知道这是一个老问题,但我遇到了类似的问题,想发布我的解决方案,以防其他人受益。我在学习使用时遇到了问题:
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 文件。确保只删除 designer 文件。不要删除另一个,因为它包含页面的 C# 代码。 右键单击父 aspx 文件。在弹出菜单中,选择转换为 Web 应用程序。现在该元素应该可以在 C# 代码文件中访问了。
【讨论】:
请注意,右键单击“转换为 Web 应用程序”选项也可用于文件夹和项目。 option number #2 是我今天遇到这个问题时解决这个问题的完美答案! 仅供参考,在 Visual Studio 2013 中,“转换为 Web 应用程序”选项已移至“项目”菜单:***.com/questions/19561982/… 删除和重新创建设计器文件对我有用 - 谢谢 这使用项目菜单工作。注意:.aspx 文件的 【参考方案4】:此外,请确保您没有意外尝试继承或定义与其他文件相同(部分)类的文件。请注意,这些文件似乎与实际出现错误的文件无关!
【讨论】:
【参考方案5】:我遇到了同样的问题。原来我的项目中有“MyPage.aspx”和“MyPage.aspx 的副本”。
【讨论】:
【参考方案6】:我遇到了同样的错误,除了它是 WPF 错误。我正在重新安排项目,并有一个这样定义的控件:
<local:CustomControl Name="Custom" />
在我后面的代码中,我尝试使用 Custom.Blah,但出现错误:
The name 'Custom' does not exist in the current context
对我来说,诀窍是将我在 Xaml 中的控制更改为:
<local:CustomControl x:Name="Custom" />
希望这对那里的人有所帮助!
【讨论】:
【参考方案7】:上面提供的解决方案选项 #2 适用于 Windows 窗体应用程序而不是 Web aspx 应用程序。我在 web 应用程序中遇到了类似的错误,我通过删除一个文件来解决这个问题,在该文件中我有一个同名的用户控件,这个 aspx 文件实际上是一个备份文件,在过程中的任何地方都没有引用,但它仍然导致错误,因为在备份文件上注册的用户控件的名称在流程中引用的 aspx 文件上的名称完全相同。所以我删除了备份文件并构建了解决方案,构建成功。
希望这对遇到类似情况的人有所帮助。
Vijaya Laxmi。
【讨论】:
【参考方案8】:我遇到了同样的问题,因为我试图从 Visual Studio 2010 项目重新生成 aspx 文件,因此控件具有 clientidmode="Static" 属性。当它被删除时,它被解决了。
【讨论】:
【参考方案9】:在从 DataList 转换后使用中继器进行调整时,我遇到了类似的问题。
问题是我在删除不需要的属性时不小心合并了 2 个属性。
<asp:Repeater runat="server" ID="ClientsRP"DataSourceID="ClientsDS">
.
.
.
</asp:Repeater>
这会阻止在设计文件中生成中继器。
【讨论】:
【参考方案10】:我收到了同样的错误信息。我的代码没有错误并且运行良好,然后我决定返回并重命名我的一个按钮,突然它给了我一个编译错误,伴随着蓝色波浪下划线,说控件在当前上下文中不存在......
原来 Visual Studio 是愚蠢的,因为问题与我为我的 aspx.cs 类制作的备份文件有关。我删除了这些,错误就消失了。
【讨论】:
【参考方案11】:在对数据上下文进行更改后,我得到了同样的错误。但是我遇到了一些我不熟悉的东西。我习惯于手动发布我的文件。通常,当我这样做时,发布文件夹中不会出现 App_Code 文件夹。我开始使用 VS 12 发布,它在您的协助下直接发布到 Web 服务器。然后我得到关于被预编译应用程序的错误。然后我删除它工作的 app_code 文件夹。但后来它给了我你得到的数据上下文错误。所以我只是删除了所有文件并再次运行发布,没有文件限制(每个文件夹和文件都将被发布)然后它就像一个魅力。
【讨论】:
【参考方案12】:我遇到了同样的问题。显然,您不应该在 BLL 中调用与 .aspx/.aspx.cs 文件之一同名的类。我认为它们不会在同一个范围内,等等,但它与 Visual Studio 的内部工作混淆了太多。如果它会产生这种类型的错误,我有点惊讶没有什么可以阻止你这样做。无论如何,只需删除 .aspx/.aspx.cs 文件并重建您的项目。然后用另一个名字把他们带回来。如果您不想重新输入所有代码,可以将代码复制/粘贴到另一个编辑器中。
【讨论】:
【参考方案13】:在我的例子中,当我创建 Web 表单时,它被命名为 WebForm1.aspx 和相应的名称 (WebForm1)。信,我把它改名为别的东西。我几乎在所有地方都手动重命名,但设计器文件中的一个地方仍将其显示为“WebForm1”。
我也改变了它并摆脱了这个错误。
【讨论】:
【参考方案14】:我有同样的问题,我的问题是两个属性之间没有空格
AutoGenerateColumns="False"DataKeyNames="ProductID"
而不是
AutoGenerateColumns="False" DataKeyNames="ProductID"
【讨论】:
【参考方案15】:我在我的项目中通过备份当前文件(所以我仍然有我的代码)、删除当前 aspx(和子页面)、创建一个新文件并将备份文件的内容复制到新文件中解决了这个问题文件。
【讨论】:
【参考方案16】:当您错过 runat="server"
时,通常会发生此错误。
【讨论】:
【参考方案17】:1) 检查“filename.aspx”页面中 中的CodeFile 属性,您的Code behind 文件名和该属性名应该相同。
2)你可能会错过代码中的 runat="server"
【讨论】:
【参考方案18】:在我的情况下,我必须通过 417“找不到控制名称”错误来查找实际错误:我已经替换了 DLL,但没有更新 web.config 中的版本号。修复该问题并成功构建,3 分钟后所有其他错误都自行解决。
【讨论】:
以上是关于当前上下文中不存在名称“controlname”的主要内容,如果未能解决你的问题,请参考以下文章