web-dev-qa-db-ja.com

基本クラスにはフィールドが含まれていますが、タイプはコントロールのタイプと互換性がありません

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ディレクトリに以下のクラスを持つWebアプリケーションプロジェクトがあり、クラス内のコントロールのweb.configにタグプレフィックス参照があります。 私は今何をしますか?

Web.Config

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

Markup

<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();
        }
    }
}

これらを試しました

13
Deeptechtons

アセンブリ名も指定してみてください。

<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" />
5
James Johnson

ビルド(および公開)オプションのチェックを外す「このプリコンパイルされたサイトを更新可能にする」

ランタイムには十分ではない可能性があるため、「固定命名と単一ページアセンブリを使用する」オプションをチェックすると、私のケースは解決しました:)

このエラーに関する便利なリンクは次のとおりです。 http://forums.asp.net/t/960707.aspx

3
DestyNova

次のようなaspxページではなく、web.confのascxユーザーコントロールを参照してください。

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

それで私の問題は解決しました。

1

WebフォームWebサイトをMVCWebアプリに変換し、ターゲットフレームワークを4.6に変更しているときに、この問題が発生しました。私にとっての解決策は、web.configのpages要素にcontrolRenderingCompatibilityVersion属性を設定することでした。

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

これが古いことは知っていますが、テキストボックスをラベルコントロールに変更しようとすると同じエラーが発生しました。コントロールのIDを「Insulin」から「Insulin2」に変更しただけで問題が解決しました。なぜそれが機能したのかはわかりませんが、それはマイクロソフトにとっての質問かもしれません。

これをさらに調べた後、Visual Studioで作業していたページのタブを閉じてから再度開くと、エラーがすべて消えてしまったことに気付きました。これが誰かに役立つことを願っています。

0
parkfun