25

プロジェクトがあり、ページにカスタム サーバー コントロール (ファイルがない) を登録しようとし.ascxています。私は現在使用しています

クラス宣言

namespace MyApp.Controls{
    public class CustomControl: WebControl{
        public string Text
        {
            get
            {
                String s = (String)ViewState["Text"];
                return ((s == null) ? String.Empty : s);
            }
            set
            {
                ViewState["Text"] = value;
            }
        }        
        protected override void RenderContents(HtmlTextWriter output)
        {
            output.Write(Text);
        }
    }
}

マイページでは、

<%@ Register TagPrefix="myControls" Namespace="MyApp.Controls" %>
<myControls:CustomControl runat="server" Text="What up!" />

「不明なサーバー タグ 'myControls:CustomControl'」というメッセージのパーサー エラーが表示されます。

私は何を間違っていますか?

4

4 に答える 4

45

このコントロールが別のクラス ライブラリにある場合、または同じライブラリにある場合でも、@Register でコントロールのアセンブリを指定することは悪い考えではありません。

<%@ Register TagPrefix="myControls" Namespace="MyApp.Controls" Assembly="MyApp" %>
<myControls:CustomControl runat="server" Text="What's up!" />

すべてが正しくコンパイルされていることを確認するために、ソリューションもクリーンアップして再構築してください。

于 2011-03-11T18:00:09.927 に答える
8

コントロールを複数のページで再利用する場合は、影響を受けるすべてのページで同じ <@Register タグをコピーして貼り付けるのではなく、system.web/pages/controls サブ要素の 1 つとして web.config に登録することをお勧めします。

web.config:

<system.web>
  <pages ...>
    <controls>
      ...
      <add tagPrefix="myCompany" namespace="MyCompany.Whatever.Controls" assembly="Whatever"/>
    </controls>

thepage.aspx:

<myCompany:ControlClassName ID="TheStuff" runat="server" ... />
于 2013-04-30T09:59:51.190 に答える
5

コントロールをフォルダーの下に配置するかApp_Code(コントロールがアセンブリにない場合)、このコントロールがあるアセンブリへの参照を追加する必要があります。

<%@ Register TagPrefix="myControls" Namespace="MyApp.Controls"
      Assembly="SomeAssembly" %>

しかし、推測すると、あなたのコントロールはApp_Codeフォルダーの下にはありません。

于 2011-03-11T17:59:33.210 に答える
4

登録タグにアセンブリ属性を追加します

于 2011-03-11T18:09:48.643 に答える