我的控件“不允许在此处使用,因为它没有扩展类'System.Web.UI.UserControl'”。

16

我有一个难题(至少对我来说是难题)。

我正在尝试在一个只提供给我部分源代码的CMS中创建自己的自定义控件(即由供应商提供给我的示例代码)。基本上,我创建了一个名为DataDefinitionContent的类,它扩展了ControlBase。现在从元数据中我所能获得的信息是,ControlBase继承自UserControl,因此我认为这应该可以顺利运行。是否有人能解释一下为什么这对我没有起作用?


我的类:

public partial class DataDefinitionContent : ControlBase, ICustomControl<DataDefinition>
{
... Stuff
}

控制基础类:

using System;
using System.Web.UI;
namespace CMS.Web
{
    public class ControlBase : UserControl
    {
    ... Stuff
    }
}

我的ascx文件:

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="DataDefinitionContent.ascx.cs"
    Inherits="CMS.Admin.WebUI.CustomControls.DataDefinitionContent, CoA.Admin.WebUI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" %>

我遇到的错误:

解析器错误消息: 'CMS.Admin.WebUI.CustomControls.DataDefinitionContent, CoA.Admin.WebUI,Version = 1.0.0.0, Culture = neutral,PublicKeyToken = null' 因为它没有扩展类 'System.Web.UI.UserControl' 而无法在此使用。

第1行: <%@ Control Language="C#" AutoEventWireup="true" CodeBehind="DataDefinitionContent.ascx.cs"


你的部分类是否在命名空间中? - Jack Marchetti
实际上不是这样的。你能给我一个提示,我应该如何解密应该把它放在哪个命名空间中吗?(楼主还是新手) - Iain Fraser
你的 Inherits 中有 ="CMS.Admin.WebUI.CustomControls.DataDefinitionContent, CoA.Admin.WebUI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null",我认为你不需要它。命名空间看起来像是 CMS.Admin.WebUI.CustomControls,但 ControlBase 看起来在 CMS.Web 中。 - Jack Marchetti
3个回答

13

尝试将你的部分类放在

namespace CMS.Web 

你的建议很有效,但我最终选择了另外一种思路来解决这个问题。谢谢你的帮助。 - Iain Fraser
酷啊,你采用了什么方法?如果你将一个网站转换为Web应用程序,整个命名空间问题可能会变成一场彻底的噩梦。 - Jack Marchetti
更具体地说,“设计师”文件并不总是生成正确的命名空间。将其更新为具有正确命名空间的文件可以解决此问题。 - Michael Adamission

7

当扩展UserControl类的类名与ASP包含中使用的名称不同时,我遇到了此错误。我更改了类名并重新部署了解决方案。问题已经解决。


当重命名文件时,类的名称未在每个站点上更新,这是我的情况。 - Sieg

0
在我的情况下,由于缺少命名空间而引发了错误。

更具体地说,“设计师”文件并不总是生成正确的命名空间。将其更新为具有正确命名空间的文件可以解决此问题。 - Michael Adamission

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接