Базовый класс включает поле, но тип несовместим с типом управления
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).
Я сделал много настраиваемых элементов управления до того же самого пути, но Hell эта ошибка меня заводит. У меня есть проект веб-приложения с нижеприведенным классом в каталоге App_Code
, с тегом tagprefix в web.config для элемента управления в классе. Что мне теперь делать?
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();
}
}
}
Пробовал эти
Ответы
Ответ 1
Попробуйте также указать имя сборки:
<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" />
Ответ 2
Отменить выбор сборки (и публикации) "Разрешить обновление этого предварительно скомпилированного сайта"
Это может быть недостаточно для среды выполнения, поэтому установите флажок "Использовать фиксированные имена и отдельные узлы", и он решил мой случай:)
вот полезная ссылка об этой ошибке: http://forums.asp.net/t/960707.aspx
Ответ 3
Обратитесь к пользовательскому элементу ascx в web.conf вместо aspx-страницы, например:
<add tagPrefix="proj1" src="~/userControls/Invoiceshow.ascx" tagName="proj1tagname">
Это решило мою проблему.
Ответ 4
Обнаружена эта проблема при преобразовании веб-сайта Web Forms в MVC Web App и изменении целевой платформы на 4.6. Решением для меня было установить атрибут controlRenderingCompatibilityVersion в элементе pages в web.config:
<system.web>
<pages validateRequest="true" controlRenderingCompatibilityVersion="4.6" clientIDMode="AutoID">
</system.web>
Ответ 5
Я знаю, что это старо, но у меня была такая же ошибка, пытающаяся изменить текстовое поле на элемент управления меткой. Я просто изменил идентификатор элемента управления от "Инсулин" до "Инсулин2", который исправил проблему. Я не уверен, почему это сработало, но это может быть вопросом для Microsoft.
Посмотрев на это больше, я заметил, что если я закрыл вкладку страницы, над которой работал в Visual Studio, а затем снова открыл ее, ошибка исчезла вместе? Надеюсь, это поможет кому-то.