Базовый класс включает поле, но тип не совместим с типом управления - PullRequest
13 голосов
/ 22 ноября 2011

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).

До этого я делал много пользовательских элементов управления, но, черт возьми, эта ошибка сводит меня с ума. У меня есть проект веб-приложения с приведенным ниже классом в каталоге 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();
        }
    }
}

пробовал эти

Ответы [ 5 ]

5 голосов
/ 22 ноября 2011

Попробуйте также указать имя сборки:

<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" />
3 голосов
/ 15 февраля 2016

Снимите флажок сборки (и опубликуйте) параметр «Разрешить обновление этого предварительно скомпилированного сайта»

Возможно, этого не хватит для среды выполнения, поэтому отметьте опцию «использовать фиксированные имена и одностраничные сборки», и это решило мой случай:)

Вот полезная ссылка об этой ошибке: http://forums.asp.net/t/960707.aspx

1 голос
/ 17 января 2019

Обнаружена эта проблема при преобразовании веб-сайта веб-форм в MVC Web App и изменении целевой платформы на 4.6.Решением для меня было установить атрибут controlRenderingCompatibilityVersion в элементе pages в web.config:

<system.web>
   <pages validateRequest="true" controlRenderingCompatibilityVersion="4.6" clientIDMode="AutoID">
</system.web>
1 голос
/ 18 сентября 2013

См. Пользовательский элемент управления ascx в web.conf вместо страницы aspx, например:

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

Это решило мою проблему.

0 голосов
/ 06 сентября 2017

Я знаю, что это старая версия, но у меня была та же ошибка при попытке изменить текстовое поле на элемент управления меткой.Я просто изменил идентификатор элемента управления с «Инсулин» на «Инсулин2», что решило проблему.Я не уверен, почему это сработало, но это может быть вопросом для Microsoft.

Изучив это подробнее, я заметил, закрыл ли я вкладку страницы, над которой работал, в Visual Studio, а затем снова открылэто, ошибка ушла все вместе?Надеюсь, это кому-нибудь поможет.

...