用于ASP.NET的VB.NET UserControl:“不是已知元素”

时间:2011-03-25 10:17:30

标签: asp.net vb.net user-controls

我在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>

4 个答案:

答案 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)

只是添加解决方案的解释。解决方案无法加载控件,因为控件出错。因此,当您将控件拖放到表单上时,它从未在设计时完全注册。

始终检查控件是否存在某种排除或隐藏错误。