ASP.NET 控件无法在 Visual Studio 2008 的代码隐藏中引用
Posted
技术标签:
【中文标题】ASP.NET 控件无法在 Visual Studio 2008 的代码隐藏中引用【英文标题】:ASP.NET controls cannot be referenced in code-behind in Visual Studio 2008 【发布时间】:2010-09-07 12:13:45 【问题描述】:好吧,我的视觉工作室坏了。我说这不是过早的,因为这是我第一次看到我的代码哪里搞砸了。当我向页面添加控件时,我无法在后面的代码中引用所有控件。其中一些我可以,似乎我放在页面上的前几个工作,然后它就停止了。
我最初认为这可能是我最初尝试在更新面板中引用中继器的控件类型。我知道我正确地引用了我的 aspx 页面中的代码。但以防万一我搞砸了,我开始从头开始重新创建页面,这一次在 VS 停止识别我的控件之前又关闭了一些控件。
在创建我的页面两次并卡住之后,我想也许它仍然是控件的类型。我创建了一个新页面,只是在上面贴了一些标签。没有骰子,从后面的代码引用控件时构建失败。
在一个可能不相关的注释中,当我切换到 aspx 页面 VS 2008 的可怕“设计”模式时出现错误并重新启动。
我已经向 Microsoft 提交了故障单。我卸载了所有加载项,我重新安装了 Visual Studio。
任何想查看我的代码的人都可以问,但我使用的是直接的 WYSIWYG 视觉工作室“新 aspx 页面”,没什么特别的。
我怀疑有人遇到过这种情况,但是你有吗?
有没有人用微软成功解决了这些问题?有什么方法可以加快这张票而不付钱???几天来,我一直在与微软的代表交谈,但还没有运气,我已经死在水里了。
Jon Limjap:我编辑了标题以使其清晰和具有描述性并且确保没有人认为它具有冒犯性。尽管您的问题显然是有效的,但“Foo-barred”并不完全构成正确的问题标题。
【问题讨论】:
【参考方案1】:上述修复(删除临时文件)对我不起作用。我不得不删除PageName.aspx.designer.cs
文件,然后右键单击我的页面,然后从上下文菜单中选择“转换为Web 应用程序”。
当 Visual Studio 尝试重建设计器文件时,它遇到了(并向我揭示了)问题的根源。就我而言,VS 丢失了对我页面上的某个控件所需的 DLL 的引用,因此我必须清除项目中生成的 bin 文件夹。
【讨论】:
+1。每次我遇到这样的问题时,它总是归结为自动生成的设计器文件中的问题。执行这些步骤会发现错误。 如果找不到“转换为 Web 应用程序”选项:***.com/questions/19561982/… 感谢 Andre Pena 指出在哪里可以找到转换 Web 应用程序选项!非常有帮助!我对您的评论以及 LorettaDave 的回答投了赞成票!【参考方案2】:尝试清除本地 VS 缓存。找到您的项目并删除该文件夹。该文件夹是由VS创建的,我真的不明白什么原因。但我有好几次清除它并重新构建修复问题......希望这也是你所需要的。
这里
%Temp%\VWDWebCache
可能在这里
%LocalAppData%\Microsoft\WebsiteCache
【讨论】:
你知道这个缓存在 Vista 中的位置吗? 对不起,我没有。我安装了一次Vista,然后又回到了XP。尝试只搜索 VWDWebCache 或 WebsiteCache 的文件夹,看看是否可以找到它。如果是这样,请添加其他评论或答案。【参考方案3】:您尝试引用的控件是否在中继器内部?
如果是这样,那么您需要使用 FindControl 方法查找它们。
例如:
<asp:Repeater ID="Repeater1" runat="server">
<ItemTemplate>
<asp:LinkButton ID="LinkButton1" runat="server">stest</asp:LinkButton>
</ItemTemplate>
</asp:Repeater>
您需要这样做才能引用它:
LinkButton lb = Repeater1.FindControl("LinkButton1");
【讨论】:
【参考方案4】:就我而言,我正在使用一些旧的网站代码,我将其转换为 VS2008 解决方案。我遇到了同样的问题。
对我来说,解决方法是在解决方案资源管理器中右键单击网站项目,然后选择转换为 Web 应用程序。这为所有页面创建了designer.cs
文件,之前还没有这些文件。
【讨论】:
【参考方案5】:您还可以在此处找到可以安全删除的 .net 临时文件: C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET 文件
【讨论】:
【参考方案6】:我观察到发生这种情况是因为缺少 .designer.cs 文件。在我的情况下解决了这个问题(基本上我将这些文件从 VS 2005 web 项目复制到 VS 2010 项目):右键单击 .aspx 文件并选择菜单“转换为网站”,这将创建 .designer.cs 文件和那么它应该工作文件。
【讨论】:
【参考方案7】:在我的情况下,没有检测到我添加到现有控件的新 asp 控件。
对我有用的是通过重命名现有控件来破坏构建来强制重新编译,例如:将 <asp:TextBox ID="txtTitle" runat="server" />
更改为 <asp:TextBox ID="txtTitle2" runat="server" />
当我更正 ID 并重建时,生成了一个带有更正 ID 和新控件的新设计器文件。
【讨论】:
其他解决方案对我不起作用。这个做到了。谢谢!【参考方案8】:右键单击项目名称并选择“清理”。然后,检查您的 bin 文件夹是否有剩余的 dll。如果是这样,请将其删除。而已。只需重建,一切都会正常工作。
【讨论】:
我正在使用 VS 2017 pro,我一次又一次遇到同样的问题,这个解决方案对我来说非常有效。【参考方案9】:如果源页面上的Inherits
属性与后面代码中的类名不匹配,也会发生这种情况。一般来说,这可能只会在您复制/粘贴 .ascx/.aspx 文件并忘记更新它时发生。
例子:
<%@ Control AutoEventWireup="false" CodeBehind="myControl.ascx.vb" Inherits="myProject.myWrongControl" %>
类背后的代码:
Partial Public Class myControl
【讨论】:
【参考方案10】:当应用程序运行时,我们无法更改代码。为此,首先单击顶部的停止按钮,这将停止您的应用程序。现在在设计模式下单击该按钮,它将在 .aspx 中插入代码。 cs文件,然后在里面写代码
【讨论】:
【参考方案11】:一旦我遇到这个问题,请检查您的 aspx 文件中的错误
【讨论】:
【参考方案12】:我曾经发生过几次这种情况,今天又因为新的原因再次发生。我通常通过 IIS 运行我的项目,但需要在本地运行它以进行调试。我通常在 IIS 中的 80 端口和调试中的 81 端口上运行,但是我在 web.config 中有一些使用 80 的设置,所以我只是在 IIS 中杀死了该网站,并将网站切换到项目设置中的 80 端口。无论出于何种原因,这搞砸了一切,并造成了 OP 中描述的问题。我开始一一尝试,包括这里提到的所有建议,但最终在项目设置中将端口切换回 81 是可行的。
【讨论】:
【参考方案13】:对我来说,删除/重命名以下位置的文件是可行的:
C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\myvirtualwebsite\e331e0a9
【讨论】:
【参考方案14】:只是想在这个问题上加两分钱。
以上所有内容中唯一对我有用的是“清理”,然后删除 bin 文件夹中剩余的所有内容。重建,然后所有控件开始工作。
【讨论】:
【参考方案15】:仅供参考...我也遇到了这个问题,我最终通过删除现有的 .designer.vb 文件、右键单击项目并选择转换为 Web 应用程序来修复它。然后它显示了导致 GUI 自己崩溃的真正“错误”。原来我为其他 2 个标签使用了相同的名称,但错误列表窗口中没有显示。一旦我重命名了其他 2 个标签之一,它就可以很好地构建并且不再给我带来麻烦。
【讨论】:
【参考方案16】:你必须添加
runat="server"
到页面中的每个元素。
【讨论】:
以上是关于ASP.NET 控件无法在 Visual Studio 2008 的代码隐藏中引用的主要内容,如果未能解决你的问题,请参考以下文章
Visual Studio 2010 和 ASP.NET MVC 中的 HTML5 音频控件问题
无法在 Visual Studio 中发布 ASP.Net 应用程序
DevExpress ASP.NET Core v19.1版本亮点:Visual Studio集成