【问题标题】:Code behind file not recognizing controls in *.ascx文件隐藏代码无法识别 *.ascx 中的控件
【发布时间】:2011-02-22 10:07:23
【问题描述】:

我有一个 QuestionControl.ascx 和一个 QuestionControl.ascx.cs 代码隐藏在我复制到一个新项目的文件中。当我构建项目时,代码隐藏文件中对 ascx 中声明的控件的任何引用都会给我这个错误:

'QuestionControl' 不包含 'rdbtnlstQuestion1' 的定义和 没有扩展方法 'rdbtnlstQuestion1' 接受第一个 'QuestionControl' 类型的参数 可以找到(您是否缺少 使用指令或程序集 参考?)

这是我的 *.ascx 的顶部:

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

我也尝试过 CodeBehind:

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

这是代码隐藏文件中我的类的顶部,它不包含在命名空间中:

public partial class QuestionControl : System.Web.UI.UserControl
{

【问题讨论】:

  • 如果您添加另一个空白 ascx 和另一个控件,该控件是否也无法编译?
  • 这是哪个版本的 .NET 框架?而且,为了确定,这是 MVC 还是 WebForms?
  • 你检查命名空间了吗?

标签: c# asp.net ascx


【解决方案1】:

尝试删除您的设计器文件。当您打开 ascx 文件时,VS.NET 应该为您重新创建它。过去我遇到过这样的问题,设计器由于某种原因不同步,删除它通常可以解决问题。

【讨论】:

  • 我认为你是对的。没有 .designer 文件,我认为这是问题所在,因为它包含 ascx 中控件的声明。但我觉得奇怪的是在我之前使用过用户控件的项目中,它在没有设计器文件的情况下运行良好。我已经尝试删除和读取用户控件,并且没有创建设计器文件。我也尝试过手动创建 *ascx.designer.cs 文件,但该文件没有与它的节点下的用户控件关联,我仍然得到错误。
  • 你用的是什么版本的VS?什么类型的项目(网站、webapp 等)?
  • 好的,我右键单击 *.ascx 文件并选择“转换为 Web 应用程序”,它生成了设计器文件并将其关联到 ascx 文件下。我现在想知道的是什么告诉 Visual Studio 设计器文件与特定的 ascx 文件相关联,因为当我手动创建它时,它不想使用该文件。肯定有一些标记对 VS 说“嘿,这是我的设计器文件,使用它”。
  • VS 2008 中的 ASP.NET Web 应用程序
  • 当您的设计器文件未重新生成时:stackoverflow.com/questions/45325/…
【解决方案2】:

另一种解决方案是:

  • 设计视图中打开您的 .ascx 页面
  • 右键单击页面任意位置并选择刷新

(.ascx.designer.cs 文件可能需要在刷新时关闭才能正常工作)

【讨论】:

    【解决方案3】:

    在 VS2017 中,.ascx 文件的上下文菜单中没有“转换为 Web 应用程序”选项。相反,您需要选择 .ascx 文件,然后单击上方菜单中的“项目”并选择“转换为 Web 应用程序”(在项目菜单中一直向下。

    【讨论】:

      【解决方案4】:

      对我有用的方法列在另一个 SO 答案中,但我找不到,所以我在这里重复。

      尝试删除

      中的“ReflectedSchemas”文件夹

      C:\Users\YOURUSENAME\AppData\Roaming\Microsoft\VisualStudio\15.0_079f391b\ReflectedSchemas

      这对我有用。有时我会收到“无法识别”的错误,然后我再次删除了这个文件夹。非常感谢OP。多年来一直让我发疯。现在我在 HTML 中没有“曲线”,后面的代码中也没有“红条”(aspx.cs)

      【讨论】:

        【解决方案5】:

        我遇到了一些问题,例如在 gridview 中创建下拉列表。我所做的是在 gv 之外创建 ddl,直到 desinger.cs 识别它,然后将控件移到 gv 内......希望这会有所帮助

        【讨论】:

          【解决方案6】:

          我遇到了同样的问题,代码隐藏无法识别 .aspx 页面上的控件。我正在使用 VS 2012。我右键单击该项目;单击转换为 Web 应用程序;它添加了以前根本不存在的所有设计器文件。我重建了一切,现在很好。

          【讨论】:

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