質問

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

名前空間:カスタムコントロール

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

次にこのコントロールを aspx 次のようなページ:

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

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

結局のところ、私にはインテリジェンスがありません。さらに悪いことに、「不明なサーバータグ」という解析エラーが発生します。web」コントロールを含むページを実行しようとすると、

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

私の問題は何でしょうか?

前もって感謝します。

役に立ちましたか?

解決

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

Webアプリケーションプロジェクトの手法

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

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

    <%@ 登録アセンブリ="WebApplication2" 名前空間="カスタムコントロール" タグプレフィックス="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 ページの先頭にアセンブリ登録を追加します。

    <%@ 登録アセンブリ="CustomControls" namespace="CustomControls" tagprefix="web" %>

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

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

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. 次の行を先頭に追加して、aspx ページの app_code のアセンブリ/名前空間を登録します。

    <%@ 登録名前空間="CustomControls" Assembly="__code" tagprefix="web" %>

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

    <web:Literal2 ID="literal2" runat="server" Text="test2" />

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

他のヒント

あなたが他のページ

でそれを使用したい場合は、

また、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>

のウェブサイトについては、この意志作品

<add tagPrefix ="web" namespace="ASP.App_Code.CustomControls" />

問題はあなたの中にあります <%@ Register TagPrefix="web" Namespace="CustomControls" %> 鬼ごっこ:アセンブリ名が抜けています。

必ずそうなるはずです <%@ Register TagPrefix="web" Namespace="CustomControls" Assembly="YourAssemblyName" %>. 。クラスのアセンブリ名を見つけるのが難しい場合は、次のヒントを参照してください。

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

それ以外の場合は、プロジェクトのレイアウトに関する情報を提供してください。

ページ.IF 一番簡単な方法は、ドラッグ・アンド・ドロップします(ページが同じ溶液中にある場合)のページへ上のLiteral.ascxをしている別の解決策である、あなたは、VSのツールボックスにコントロールを追加することができますし、ページ上のコントロールをドラッグ&ドロップます。

あなたはsrc属性を忘れてしまっています。

<%@ Register TagPrefix="web" Namespace="CustomControls" Src="PathToYourCustomControl" %> 
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top