LoadControl导致分析器错误

时间:2010-01-27 01:30:14

标签: asp.net

我们正在使用LoadControl动态地将ascx文件加载到占位符控件中。代码隐藏看起来非常简单:

child = base.LoadControl(manufacturerTemplate.TemplatePath);
this.ManufacturerPlaceHolder.Controls.Add(child);

控件标题如下所示:

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

我已经验证了所有内容和编译的拼写。它在ASP.NET开发Web服务器中工作正常。但是当我将它上传到我的IIS主机时,我收到了这个错误:

  

分析程序错误:无法加载类型'MyNamespace.MyControl。

代码隐藏编译没有错误。它实际上是另一个控件的代码隐藏的重复。 (验证拼写是准确的)我尝试过的一件事是修改@Control指令以指向第二个控件的代码隐藏(共享相同的功能)....它完美地工作。

我尝试过的其他一些事情:

  • 文件系统权限
  • 重新启动IIS
  • 清除ASP.NET Temp文件夹

所以在这一点上,我不知道为什么我不能使用我试图添加的代码隐藏不起作用。我可以将它指向其他类的代码隐藏,并且它工作正常。 (在更改“inherits”值之后)所以我只能假设它是一个编译问题。但它正确构建没有错误。

我忘了什么?

3 个答案:

答案 0 :(得分:1)

将您的控制标记更改为此

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

在您正在使用控件的ASPX页面上,添加此代码

<%@ Reference Control="~/path/to/control/MyControl.ascx" %>

在您的代码中使用此

MyControl controlObject= (MyControl)LoadControl("~/path/to/control/MyControl.ascx");
this.Controls.Add(controlObject);

答案 1 :(得分:0)

一些想法:

  • 确保完全清理并重建您的应用程序。
  • 确保在发布应用程序时删除(而不是替换!)所有现有文件。
  • 确保控件位于从该目录引用的子文件夹或目录中。
  • 确保ascx的dll位于bin文件夹中。

答案 2 :(得分:0)

我发现了问题。该项目是一个“Web应用程序”,而不是“网站。所以它不仅要编译,而且我必须部署网站的程序集。