服务器控制错误:ASP.NET的未知服务器标记

时间:2012-10-19 21:19:58

标签: asp.net vb.net

我正在尝试在 VB ASP.Net

中使用自定义控件

我读了几个帖子,但它似乎对我帮助不大。 我有一个解决方案,包括:

  • 网站项目名为“SiteCI”
  • 类库项目名为“SiteCI-classes”

网站项目引用了库项目,并且在网站项目的bin文件夹中正确生成了库DLL。

当我在网站项目中创建一个随机类时,我可以通过键入以下内容来访问名为MailLink的测试控件类:

SiteCI_classes.Controls.MailLink

它完美运行,Visual Studio向我建议,因此两个项目之间的链接设置正确

请注意我每次清理/重建项目,看看它是否真的有效,所以这不是DLL构建不正确的问题。

在system.web内的Web Config文件中 - >页面 - >控件我添加了:

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

但是在我添加的ASP.Net页面上:

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

我收到 未知服务器代码'自定义:MailLink' 错误。

要检查我是否在输入Web配置文件时没有出错,我尝试将SiteCI类更改为SiteCI_classes,并且我收到一条错误消息,说它无法加载程序集,所以我猜部分没问题,然后我尝试在 * namespace =“SiteCI_classes.Controls”* 中更改 namespace =“Controls” namespace =“SiteCI-classes.Controls” ,但它无法解决未知服务器标记问题。

我不知道该怎么做......它应该有效,不是吗?

以下是MailLink.vb,它位于Library项目的名为 Controls 的文件夹中。这是我在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

1 个答案:

答案 0 :(得分:0)

我发现问题似乎仅由项目名称中的短划线(“ - ”)引起。

项目名称仍为“SiteCI-Classes” WebConfig的最终代码不同:

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

注意两者之间的区别。 ASP.Net 3.5不会识别项目名称中的短划线并且似乎将其删除:如果您尝试将其设置为SiteCI-Classes,则最终会出现未找到程序集之类的错误。