【问题标题】:asp.Net <control> does not exist in current contextasp.Net <control> 在当前上下文中不存在
【发布时间】:2011-07-09 10:24:37
【问题描述】:

我面临一个小问题。我采用了一个下拉列表控件,ID 是 "drpDownCountries”在 ASP.Net 项目中。问题是“下拉列表控件 放置在页面上,在c#的代码隐藏文件中,在输入控件名称"drpDownCountries"时,该控件ID列在对象成员列表中。 但是,在编译项目时,我遇到了以下错误。

错误: - 当前上下文中不存在名称“drpDownCountries”

我也在不同的机器上检查过这个东西。但同样的错误正在发生。我不明白这背后的原因是什么。

【问题讨论】:

  • 能否提供错误发生的代码?
  • drpDownCountries.Attributes.Add("onBlur", "ErrorHighlight('" + drpDownCountries.ClientID + "','" + lblCountry.ClientID + "');"); 这是我遇到错误的代码。
  • 检查这个:stackoverflow.com/questions/706603/… 这个答案:“检查@Page 指令上文件名和继承属性后面的代码,确保它们都匹配。”
  • 您在哪里插入此代码?页面加载?页面初始化? Page_init 中的控件尚不存在。
  • 我需要停止使用微软的开发工具......这不是我面临的唯一“完全愚蠢”的问题。我在浪费我的生命。我想建造一些东西,但我遇到的都是这些愚蠢的问题,而且它们太多了!一次是这个,下一次因为另一个愚蠢的原因而无法连接,然后因为那个等等,直到无尽的愚蠢。我确信开源开发人员不会遇到这种愚蠢的情况。我正在努力成为一名开发人员,但我所做的只是家务。我想这就是微软开发者和真正的开源开发者之间的区别。

标签: c# asp.net


【解决方案1】:

您的 aspx/aspx 文件中可能存在错误,导致设计器文件无法正确更新。您可以通过添加新内容(例如“”)来确认这一点,看看您是否可以访问它。如果不是,那么您可能需要修复标记中的某些问题。

【讨论】:

  • 谢谢,但你知道我在不同的机器上检查过同样的事情 - 不同的机器。但我也有同样的经历。
  • 如果你的aspx/ascx有问题,那它肯定也会在其他机器上坏掉吗?
  • 这适用于我,我有 2 个标记为 runat="server" 的 div 具有相同的名称,但即使一个在 ascx 文件中被注释掉,它也会默默地导致错误并停止 ascx .designer.cs 文件不会被自动更新。我重命名了有问题的 div,然后右键单击控件并选择“转换为 Web 应用程序”并修复它。
【解决方案2】:

右键单击 ASPX(或 ascx)文件,然后选择 转换为 Web 应用程序(或类似的选项)。这将强制刷新设计器文件。

【讨论】:

  • 这对我有帮助,但我首先必须删除设计器文件。谢谢!
  • 做到了,但是现在我在代码隐藏上失去了智能感知。
【解决方案3】:

我看到项目文件夹中存在 .aspx 页面的副本时会发生此错误。

示例:

Test.aspx 中出现错误。

项目文件夹中有一个Test-copy.aspx文件。

删除、使用不同的扩展名重命名,或将 Test-copy.aspx 移动到不同的文件夹。

错误已解决。

【讨论】:

  • 我使用 Google Drive 在计算机之间同步文件。我认为它意外地将另一个名为 FileName[conflict].aspx 的文件放在那里。我备份了那个文件并删除了它,现在一切看起来都很好。这么简单的事情,我应该抓住但没有。
【解决方案4】:

你应该放一些代码来获得帮助..

无论如何,问题可能是drpDownCountries 包含在Panel 控件中

Panel 控件是一个容器控件,因为它可以容纳很多 控件。
为了访问该面板控件中的控件, 你首先需要“帮助” ASP.Net 来找到它。

执行此操作的典型方法是使用 FindControl 方法look here

代码示例:

DropDownList myDrop = (DropDownList)this.Panel1.FindControl("drpDownCountries");
 if(myDrop != null)
  {
     ..somecode..
  }

【讨论】:

    【解决方案5】:

    我遇到了同样的问题,并尝试了此处列出的所有答案,但无济于事。

    最后对我有用的是在设计视图中更改 ascx 文件 然后保存它。这最终迫使 Visual Studio 重新生成 Designer.cs 文件并包含我的新控件。

    【讨论】:

    • 来回点击设计视图终于得到runtime看到控件了。
    • 完美,解决了我的问题;)
    【解决方案6】:

    唯一对我有用的是在 aspx 文件中添加一个临时控制器并保存它。 这再次生成了设计器,我的控制器现在被识别了!我很自豪。 然后你可以移除临时控制器并保存,它不会破坏任何东西,你这胆小鬼!

    【讨论】:

    • 我在 VS 2012 上。在马上。
    【解决方案7】:

    重新创建项目。就新建一个项目,把元素一一添加,希望不要再发生了。如果确实如此,那么这就是 Microsoft 体验的一部分:重新创建另一个项目等等,直到您决定辞去工作并加入开源。

    更正

    我将使用 ASP .NET MVC 重做我过去 3 天以来一直在从事的项目。我肯定应该使用开源技术,但太糟糕了,这个项目不使用 .NET 不是我的决定。

    【讨论】:

      【解决方案8】:

      所以首先检查你的 ascx 文档是这样定义的

      ExampleClass.ascx

          <%@ Control Language="C#" AutoEventWireup="true" CodeFile="ExampleClass.ascx.cs" Inherits="ExampleClass" %>
      

      ExampleClass.ascx.cs

      public partial class ExampleClass : System.Web.UI.UserControl
      {
           protected void Page_Load(object sender, System.EventArgs e)
          {
      
          }
      }
      

      【讨论】:

        【解决方案9】:

        在aspx中,当你错过runat="server"时,经常会出现这种类型的错误

        【讨论】:

          【解决方案10】:

          不要让 Intellisense 欺骗您。有时(通常在修复类名重复的问题之后),您只需要重新构建项目,报告的错误就会消失。可能需要在构建后重新打开文件。

          【讨论】:

            【解决方案11】:

            如果在将页面复制/移动到新位置或项目后发生这种情况,您只需检查 PageName.ascx.designer.cs 是否包含在项目中。

            Visual Studio(或者可能是 reshrper)中存在一个错误:它包括 PageName.ascxPageName.ascx.cs,但不包括 PageName.ascx .designer.cs,必须手动包含。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2017-01-15
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多