我在VB.NET中创建了一个UserControl并将其添加到表单中。但看起来我做错了,因为它带有以下信息:
ctlDropDown
不是已知元素。如果这可能发生 网站中存在编译错误,或者web.config
文件丢失。
当我尝试运行它时,我收到以下错误:
此处不允许
myControl
,因为它不会扩展课程System.Web.UI.UserControl
。
以下是代码:
控制自己......
<%@ Control Language="vb" AutoEventWireup="false" CodeBehind="ctlDropDown.ascx.vb" Inherits="myProj.UserControls.ctlDropDown" TargetSchema="http://schemas.microsoft.com/intellisense/ie5" %>
<asp:textbox id="txtValue" style="Z-INDEX: 101; LEFT: -100px; POSITION: absolute; TOP: -200px"
tabIndex="0" runat="server"></asp:textbox><asp:panel id="pnlMain" style="scrolling: no" Width="100%" runat="server" HorizontalAlign="Right"
BorderWidth="1px" BorderStyle="Solid">
<TABLE cellSpacing="0" cellPadding="0" width="100%" border="0">
<TR>
<TD vAlign="top" width="100%">
<asp:TextBox id="txtData" tabIndex="9500" runat="server" Width="100%" Height="100%" BorderStyle="None"
BorderWidth="0px"></asp:TextBox></TD>
<TD vAlign="top">
<asp:ImageButton id="imgDownButton" runat="server" BackColor="ControlLight" BorderStyle="Outset"
BorderWidth="2px" ImageUrl="../Arrow.gif"></asp:ImageButton></TD>
</TR>
</TABLE>
</asp:panel><asp:listbox id="lstList" tabIndex="0" Height="205px" Width="100%" runat="server" Visible="False"></asp:listbox><asp:textbox id="txtActiveElementClientID" style="Z-INDEX: 100; LEFT: -100px; POSITION: absolute; TOP: -200px"
tabIndex="0" runat="server"></asp:textbox>
在表格上......
<%@ Register TagPrefix="uc1" TagName="ctlDropdown" Src="../UserControls/ctlDropDown.ascx" %>
和......
<table>
<tr>
<TD style="POSITION: absolute;">
<uc1:ctlDropDown ID="ctlDropDown1" runat="server"></uc1:ctlDropDown>
</TD>
</tr>
</table>
答案 0 :(得分:2)
您已向我们展示了用户控件的标记。但是,还应该有一个具有该对象的实际类的文件。您的标记在此引用它:
CodeBehind="ctlDropDown.ascx.vb"
此文件应包含一个类,在此标记中引用:
Inherits="myProj.UserControls.ctlDropDown"
此类应扩展(继承自)类System.Web.UI.UserControl
。类似的东西:
Namespace myProj.UserControls
Public Class ctlDropDown Inherits System.Web.UI.UserControl
' Your class implementation. Likely a Page_Load method perhaps.
End Class
End Namespace
(请注意,该类可能会被标记为“部分”类,具体取决于用户控件的创建方式。)
编译器需要这比标记更多。 ASP .NET Web应用程序中的实际控件,用户控件等都归结为彼此交互的类。如果没有支持标记的类,则运行时不知道它,也不能使用它。
答案 1 :(得分:0)
我找到了问题的根源。在动态创建的designer.vb中错误地引用了usercontrol。所以我改变了......
Protected WithEvents ctlDropDown1 As Global.myProj.UserControls.ctlDropDown
为...
Protected WithEvents ctlDropDown1 As Global.myProj.ctlDropDown
......现在它有效。
希望这证明对某人有用。
答案 2 :(得分:0)
由于您使用后面的代码进行用户控件,控件必须从UserControl
继承,请参阅示例here。
Imports System
Imports System.Web.UI
Imports System.Web.UI.WebControls
Public Class SimpleControl
Inherits UserControl
Public name As TextBox
Public output As Label
Public myButton As Button
Public Sub myButton_Click(sender As Object, e As EventArgs)
output.Text = "Hello, " + name.Text + "."
End Sub
End Class
答案 3 :(得分:0)
只是添加解决方案的解释。解决方案无法加载控件,因为控件出错。因此,当您将控件拖放到表单上时,它从未在设计时完全注册。
始终检查控件是否存在某种排除或隐藏错误。