【问题标题】:ASP.net error: Mismatch between code file and inherit attributeASP.net 错误:代码文件和继承属性不匹配
【发布时间】:2014-04-02 13:40:40
【问题描述】:

在企业门户中打开页面会导致 Windows-Event-Log 中显示错误:

MyControl.ascx.cs(15):错误 ASPNET:确保此代码文件中定义的类与“继承”属性匹配,并且它扩展了正确的基类(例如 Page 或 UserControl)。

第 15 行在下面的源代码中标有 (X)。

ASCX.CS 文件:

namespace Company.Productgroup
{
    (X) public partial class Productname : System.Web.UI.UserControl
    {
        ...
    }
}

ASCX 文件:

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

ASCX.designer.cs 文件:

namespace Company.Productgroup    {
    public partial class Productname : System.Web.UI.UserControl
    {
        ...
    }
}

我尝试了什么:

  • 将属性 CodeBehind 更改为 CodeFile,反之亦然
  • 从 ASCX.cs 中删除命名空间 从中删除命名空间
  • ASCX.designer.cs 将 ASCX 文件中的 Inherits 属性更改为
  • 产品名称/产品组.产品名称
  • 在 Google / SO 中搜索解决方案。在几乎每一个结果中, 问题是 Inherit-attribute 和 命名空间/类名,例如:Link1Link2Link3

事实真相:

  • 所有文件都存储在同一个目录中,所以没有路径问题 应该发生。
  • VS项目中的默认命名空间设置为Company.Productgroup

【问题讨论】:

    标签: c# asp.net


    【解决方案1】:

    您的designer 文件似乎是问题所在。其中类名是Product,而在其他两个文件中是Productname。由于生成了设计器文件,所以它会不同步,这有点奇怪,但我已经看到它发生了。尝试手动修复它,看看会发生什么。

    更新

    根据您的 cmets,我决定查看我们的一些 ASCX,看看有什么不同。在我们的文件中,designer 文件都没有显示继承链。例如:

    AutoHideField.ascx.cs

    namespace Foo
    {
        public partial class AutoHideField : System.Web.UI.UserControl
    

    AutoHideField.ascx.designer.cs

    namespace Foo
    {
        public partial class AutoHideField
    

    AutoHideField.ascx

    <%@ Control ... Inherits="Foo.AutoHideField" %>
    

    【讨论】:

    • +1 类必须具有相同的名称。它们实际上都是同一个类的一部分(或者应该是,如果命名正确的话),因为它是一个部分类。
    • 你说得对。类名不同步。但无论如何 - 在更改它之后(我也调整了原始帖子中的代码),我遇到了同样的失败。
    • 我根据进一步的研究(查看我们的一些 ASCX)更新了答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多