我正在尝试在 VB ASP.Net
中使用自定义控件我读了几个帖子,但它似乎对我帮助不大。 我有一个解决方案,包括:
网站项目引用了库项目,并且在网站项目的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
答案 0 :(得分:0)
我发现问题似乎仅由项目名称中的短划线(“ - ”)引起。
项目名称仍为“SiteCI-Classes”但 WebConfig的最终代码不同:
<add assembly="SiteCIClasses" namespace="SiteCI2KClasses.Controls" tagPrefix="cc1" />
注意两者之间的区别。 ASP.Net 3.5不会识别项目名称中的短划线并且似乎将其删除:如果您尝试将其设置为SiteCI-Classes,则最终会出现未找到程序集之类的错误。