asp.net 基类包含字段,但类型与控件类型不兼容

jqjz2hbq  于 2023-10-21  发布在  .NET
关注(0)|答案(6)|浏览(208)

基类包括字段“lbl”,但其类型(web.App_Code.CustomLabelControl)与控件类型(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();
        }
    }
}

这些资源我已经查过了:

pokxtpni

pokxtpni1#

尝试也指定程序集名称:

<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" />
eiee3dmh

eiee3dmh2#

取消检查构建(和发布)选项“允许此预编译站点可更新”
对于运行时来说,它可能不够,所以检查选项“使用固定命名和单页程序集”,它解决了我的问题:)
以下是有关此错误有用链接:http://forums.asp.net/t/960707.aspx

y4ekin9u

y4ekin9u3#

在web.conf中引用ascx用户控件,而不是像这样引用aspx页面:

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

这解决了我的问题。

qv7cva1a

qv7cva1a4#

我知道这是旧的,但我有同样的错误,试图改变一个文本框的标签控件。我只是简单地将控制的ID从“Insulin”更改为“Insulin2”,解决了这个问题。我不知道为什么它会起作用,但这可能是微软的问题。
在进一步研究之后,我注意到如果我关闭了我在Visual Studio中工作的页面的选项卡,然后重新打开它,错误就消失了?我希望这能帮助到某人。

sycxhyv7

sycxhyv75#

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

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

gzszwxb46#

在我的情况下,我的应用程序发布了一个,它在我的本地以及UAT环境中工作。问题只在生产中。所以我所做的错误是,我没有移动新发布的版本ascx文件到生产,同样它是阅读旧版本发布的文件。通过将最新的文件移动到生产环境或替换它们,这个问题得到了解决。

相关问题