基类包含字段“lbl”,但其类型 (web.App_Code.CustomLabelControl) 与控件类型 (web.App_Code.CustomLabelControl) 不兼容。
我以前用同样的方式做了很多自定义控件,但今天我遇到了这个错误。
我有一个 Web 应用程序项目,在
App_Code
目录中包含以下类,在 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();
}
}
}
也尝试指定程序集名称:
<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" />
取消选中构建(和发布)选项“允许此预编译站点可更新”
对于运行时来说可能还不够,所以检查选项“使用固定命名和单页程序集”,它解决了我的情况:)
这里是关于此错误的有用链接:http://forums.asp.net/t/960707.aspx
参考 web.conf 中的 ascx 用户控件,而不是这样的 aspx 页面:
<add tagPrefix="proj1" src="~/userControls/Invoiceshow.ascx" tagName="proj1tagname">
这解决了我的问题。
我知道这已经很旧了,但我在尝试将文本框更改为标签控件时遇到了同样的错误。我只是将控件的 ID 从“Insulin”更改为“Insulin2”,从而解决了该问题。我不确定它为什么有效,但这可能是微软的问题。
进一步研究后,我注意到如果我关闭了 Visual Studio 中正在处理的页面的选项卡,然后重新打开它,错误就会消失吗?我希望这对某人有帮助。
将 Web Forms 网站转换为 MVC Web App 并将目标框架更改为 4.6 时遇到此问题。 我的解决方案是在 web.config 中的页面元素上设置 controlRenderingCompatibilityVersion 属性:
<system.web>
<pages validateRequest="true" controlRenderingCompatibilityVersion="4.6" clientIDMode="AutoID">
</system.web>
就我而言,我的应用程序已发布,它在我的本地以及 UAT 环境中运行。问题仅出现在生产中。 所以我所做的错误是,我没有将新发布的版本 ascx 文件移至生产环境,类似地,它正在读取旧版本的发布文件。 通过将最新文件移至生产环境或替换它们,这个问题得到了解决。