11

コントロールから継承するだけで、Literalまだ拡張機能がない単純なカスタム コントロールを作成しました。コードは空です。

名前空間: CustomControls

クラス名: リテラル: System.Web.UI.WebControls.Literal

次に行うことは、このコントロールをaspx次のようにページに登録することです。

<%@ Register TagPrefix="web" Namespace="CustomControls" %>

(web.configなどに加えて、これが登録方法の1つであることをいくつかのチュートリアルで読みました。)

結局のところ、私には知性がなく、さらに悪いことに、コントロールを含むページを実行しようとすると、解析エラー「unknown server tag: web」が表示されます。

この情報が必要な場合に備えて、新しいウェブサイトではなく「新しいプロジェクトの作成」を使用しました。

私の問題は何ですか?

前もって感謝します。

4

5 に答える 5

28

これが私が行った方法です。何もないところから段階的に始めます。この最初の方法では、2 番目のプロジェクト/アセンブリを使用します。App_code バージョンについては、下にスクロールします。

Web アプリケーション プロジェクト メソッド

  1. 新しい ASP.Net Web アプリケーションを作成します。名前に注意してください。私の名前は WebApplication2 です。既存の Web アプリケーションが既にある場合は、プロジェクトのプロパティ セクションをダブルクリックし、[アセンブリ名] プロパティを確認してメモします。
  2. Literal.cs という名前の Web アプリケーションで新しいクラスを作成します。
  3. クラス定義に次のようなコードを挿入します。

    namespace CustomControls
    {
        public class Literal : System.Web.UI.WebControls.Literal
        {
        }
    }
    
  4. 次の登録タグを aspx ページの上部に追加します

    <%@ Register assembly="WebApplication2" namespace="CustomControls" tagprefix="web" %>

アセンブリ名が異なる場合は、ここで変更してください。VB.Net でこれを行ったとき、名前空間が C# のような単なる CustomControls ではなく、WebApplication1.CustomControls であることに気付きました。

  1. ページに新しいコントロールを追加します。

    <web:Literal ID="Literal1" runat="server" Text="test" />

セパレート プロジェクト方式

  1. 新しい空の Web サイト (ASP.Net) を作成します。
  2. CustomControls という名前の新しい ASP.Net サーバー コントロール ライブラリをソリューションに追加します。
  3. Literal という新しいプロジェクトに新しいクラスを追加します (私は C# を使用しているため、ファイル名は Literal.cs です)。以下は私の超基本的なコードで、質問で説明されているコードと一致するはずです。

    namespace CustomControls
    {
        public class Literal : System.Web.UI.WebControls.Literal
        {
        }
    }
    
  4. CustomControls プロジェクトへの参照を Web サイトに追加します。

  5. aspx ページの上部にアセンブリ登録を追加します。

    <%@ Register assembly="CustomControls" namespace="CustomControls" tagprefix="web" %>

  6. コントロールの新しいインスタンスをページに追加します。

    <web:Literal ID="Literal1" runat="server" Text="test" />

In App_Code メソッド

  1. 新しい空の Web サイト (ASP.Net) を作成します。
  2. 新しいクラスを App_Code フォルダー Literal2 に追加します (私は C# を使用しているため、ファイル名は Literal2.cs です)。以下は私の超基本的なコードで、質問で説明されているコードと一致するはずです。これを 2 と呼んだのは、これを上記の方法と組み合わせてコンパイル エラーを発生させずに使用できるようにするためです。

    namespace CustomControls
    {
        public class Literal2 : System.Web.UI.WebControls.Literal
        {
        }
    }
    
  3. 次の行を先頭に追加して、app_code のアセンブリ/名前空間を aspx ページに登録します。

    <%@ Register Namespace="CustomControls" Assembly="__code" tagprefix="web" %>

  4. ページに新しいコントロールのインスタンスを追加します。

    <web:Literal2 ID="literal2" runat="サーバー" Text="test2" />

Visual Studio を使用してこれをテストしたところ、すべて問題なく動作しました。

于 2011-01-05T15:27:40.467 に答える
2

問題は<%@ Register TagPrefix="web" Namespace="CustomControls" %>タグにあります: アセンブリ名がありません!

にならなければなりません<%@ Register TagPrefix="web" Namespace="CustomControls" Assembly="YourAssemblyName" %>。クラスのアセンブリ名が見つからない場合は、次のヒントを参考にしてください。

  1. Web アプリケーションの Visual Studio プロジェクト内、または別の DLL (共有ライブラリ) プロジェクト内にクラスを作成した場合は、プロジェクトを右クリックし、[プロパティ] に移動してアセンブリ名を取得します。
  2. App_Code ディレクトリに .cs ファイルを作成した場合は、ASP.App_Code動作するはずです

それ以外の場合は、プロジェクトのレイアウトに関する情報をお知らせください。

于 2011-01-05T15:47:13.917 に答える
2

他のページで使用したい場合は、web.config にコントロールを登録することもできます。

<pages>
        <controls>
          <add tagPrefix="asp" namespace="System.Web.UI" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
          <add tagPrefix="asp" namespace="System.Web.UI.WebControls" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
          <add tagPrefix="web" namespace="MyProject.CustomControls" assembly="MyProject" />
        </controls>
      </pages>

Webサイトの場合、これは機能します

<add tagPrefix ="web" namespace="ASP.App_Code.CustomControls" />
于 2010-06-09T05:58:02.540 に答える
1

最も簡単な方法は、Literal.ascx をページにドラッグ アンド ドロップすることです (ページが同じソリューションにある場合)。ページが別のソリューションである場合は、コントロールを VS ツールボックスに追加してドラッグ アンド ドロップできます。 -コントロールをページにドロップします。

于 2011-01-07T12:02:18.970 に答える
0

src 属性を忘れました。

<%@ Register TagPrefix="web" Namespace="CustomControls" Src="PathToYourCustomControl" %> 
于 2011-01-11T12:27:31.073 に答える