基类包括字段,但类型与控件类型不兼容

时间:2011-11-22 16:55:56

标签: c# asp.net postback web-controls app-code

The base class includes the field 'lbl', but its type (web.App_Code.CustomLabelControl) is not compatible with the type of control (web.App_Code.CustomLabelControl).

我以同样的方式做了很多自定义控件但是地狱这个错误让我疯了。我有一个Web应用程序项目,在App_Code目录中有以下类,web.config中的tagprefix引用用于类中的控件。 我现在该怎么办?

的Web.Config

<system.web>
    <pages>
        <controls>
            <add namespace="web.App_Code" tagPrefix="CControls"/>...

标记

<form id="form1" runat="server">
<div>
    <CControls:CustomLabelControl runat="server" OnClickText="Welcome" ID="lbl">
    </CControls:CustomLabelControl>
</div>
</form>

类文件

namespace web.App_Code
{
    public class CustomLabelControl : Control, IPostBackEventHandler, IPostBackDataHandler
    {
        private string _onClickText;

        public CustomLabelControl()
        {

        }

        public string OnClickText
        {
            get { return _onClickText; }
            set { _onClickText = value; }
        }

        public void RaisePostBackEvent(string eventArgument)
        {
            throw new System.NotImplementedException();
        }


        public bool LoadPostData(string postDataKey, NameValueCollection postCollection)
        {
            throw new System.NotImplementedException();
        }


        public void RaisePostDataChangedEvent()
        {
            throw new System.NotImplementedException();
        }
    }
}

试过这些

5 个答案:

答案 0 :(得分:4)

尝试同时指定程序集名称:

<add tagPrefix="CControls" namespace="web.App_Code" assembly="web.App_Code" />

我会考虑为您的自定义控件创建一个专用命名空间,只是为了清晰起见。也许像web.App_Code.CustomControls

<add tagPrefix="CControls" namespace="web.App_Code.CustomControls" assembly="web.App_Code.CustomControls" />

答案 1 :(得分:3)

Unckeck构建(和发布)选项“允许此预编译站点可更新”

它可能不适用于运行时,因此请选中“使用固定命名和单页程序集”选项并解决了我的问题:)

这是一个关于此错误的有用链接:http://forums.asp.net/t/960707.aspx

答案 2 :(得分:1)

请参阅web.conf中的ascx用户控件,而不是像这样的aspx页面:

<add tagPrefix="proj1" src="~/userControls/Invoiceshow.ascx" tagName="proj1tagname">

这解决了我的问题。

答案 3 :(得分:1)

在将Web窗体网站转换为MVC Web App并将目标框架更改为4.6时遇到此问题。 对我来说,解决方案是在web.config中的pages元素上设置controlRenderingCompatibilityVersion属性:

<system.web>
   <pages validateRequest="true" controlRenderingCompatibilityVersion="4.6" clientIDMode="AutoID">
</system.web>

答案 4 :(得分:0)

我知道这是旧的,但我尝试将文本框更改为标签控件时遇到了同样的错误。我只是将控件的ID从“胰岛素”改为“胰岛素2”,这解决了问题。我不确定它为什么会起作用,但这对微软来说可能是一个问题。

在进一步研究之后,我注意到如果我关闭了我在Visual Studio中工作的页面的标签,然后重新打开它,错误一起消失了?我希望这有助于某人。