2

VBASP.Netでカスタムコントロールを機能させようとしています

いくつかのスレッドを読みましたが、あまり役に立たないようです。私は以下を含む解決策を持っています:

  • 「SiteCI」と呼ばれるウェブサイトプロジェクト
  • 「SiteCI-classes」と呼ばれるクラスライブラリプロジェクト

Webサイトプロジェクトにはライブラリプロジェクトへの参照があり、ライブラリDLLはWebサイトプロジェクトのbinフォルダー内に正しく生成されます。

Webサイトプロジェクト内にランダムなクラスを作成すると、次のように入力して、MailLinkというテストコントロールクラスにアクセスできます。

SiteCI_classes.Controls.MailLink

それは完璧に機能し、Visual Studioは私にそれを提案するので、2つのプロジェクト間のリンクは正しく設定されています。

プロジェクトが実際に機能するかどうかを確認するために、毎回プロジェクトをクリーンアップ/再ビルドすることに注意してください。これは、DLLビルドが正しくないという問題ではありません。

system.web内のWebConfigファイル->ページ->追加したコントロール:

<add assembly="SiteCI-classes" namespace="Controls" tagPrefix="custom" />

しかし、ASP.Netページで次を追加すると:

<custom:MailLink runat="server" id="test1"></custom:MailLink>

不明なサーバータグ「custom:MailLink」エラーが発生します。

Web構成ファイルの入力中に間違いがなかったかどうかを確認するために、SiteCI-classesをSiteCI_classesに変更しようとしましたが、アセンブリを読み込めなかったというエラーが表示されたので、パーツは問題ないと思います。 、次に* namespace ="SiteCI_classes.Controls"*またはnamespace="SiteCI-classes.Controls"のnamespace="Controls"を変更しようとしましたが、不明なサーバータグの問題は修正されませんでした。

どうしたらいいのかわからない…うまくいくはずですよね?

これは、ライブラリプロジェクトのコントロールと呼ばれるフォルダにあるMailLink.vbです。これは、テスト目的でMicrosoftページで選択したクラスです。

誰かが私に何をチェックするべきかについてのヒントをくれたら、私は非常にありがたいです。

Namespace Controls
    < _
    AspNetHostingPermission(SecurityAction.Demand, _
        Level:=AspNetHostingPermissionLevel.Minimal), _
    AspNetHostingPermission(SecurityAction.InheritanceDemand, _
        Level:=AspNetHostingPermissionLevel.Minimal), _
    DefaultProperty("Email"), _
    ParseChildren(True, "Text"), _
    ToolboxData("<{0}:MailLink runat=""server""> </{0}:MailLink>") _
    > _
    Public Class MailLink
        Inherits WebControl

        < _
        Bindable(True), _
        Category("Appearance"), _
        DefaultValue(""), _
        Description("The e-mail address.") _
        > _
        Public Overridable Property Email() As String
            Get
                Dim s As String = CStr(ViewState("Email"))
                If s Is Nothing Then s = String.Empty
                Return s
            End Get
            Set(ByVal value As String)
                ViewState("Email") = value
            End Set
        End Property

        < _
        Bindable(True), _
        Category("Appearance"), _
        DefaultValue(""), _
        Description("The text to display on the link."), _
        Localizable(True), _
        PersistenceMode(PersistenceMode.InnerDefaultProperty) _
        > _
        Public Overridable Property Text() As String
            Get
                Dim s As String = CStr(ViewState("Text"))
                If s Is Nothing Then s = String.Empty
                Return s
            End Get
            Set(ByVal value As String)
                ViewState("Text") = value
            End Set
        End Property

        Protected Overrides ReadOnly Property TagKey() _
            As HtmlTextWriterTag
            Get
                Return HtmlTextWriterTag.A
            End Get
        End Property


        Protected Overrides Sub AddAttributesToRender( _
            ByVal writer As HtmlTextWriter)
            MyBase.AddAttributesToRender(writer)
            writer.AddAttribute(HtmlTextWriterAttribute.Href, _
                "mailto:" & Email)
        End Sub

        Protected Overrides Sub RenderContents( _
            ByVal writer As HtmlTextWriter)
            If (Text = String.Empty) Then
                Text = Email
            End If
            writer.WriteEncodedText(Text)
        End Sub

    End Class
End Namespace
4

1 に答える 1

0

プロジェクト名のダッシュ ("-") のみが原因と思われる問題を発見しました。

プロジェクトの名前は「SiteCI-Classes」のままですが、WebConfig の最終的なコードは異なります。

<add assembly="SiteCIClasses" namespace="SiteCI2KClasses.Controls" tagPrefix="cc1" />

両者の違いに注意してください。ASP.Net 3.5 はプロジェクト名のダッシュを認識せず、それを削除したように見えます: SiteCI-Classes に設定しようとすると、assembly not foundのようなエラーが発生します。

于 2012-10-20T18:53:09.593 に答える