【问题标题】:LoadControl causes a Parser ErrorLoadControl 导致解析器错误
【发布时间】:2010-01-29 00:23:45
【问题描述】:

我们正在使用 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 文件夹

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

我忘记了什么?

【问题讨论】:

    标签: asp.net


    【解决方案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);
    

    【讨论】:

      【解决方案2】:

      一些想法:

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-04-10
          • 1970-01-01
          • 2019-06-17
          • 1970-01-01
          相关资源
          最近更新 更多