ASP .net:从.vb代码注册自定义控件

时间:2013-01-07 17:17:32

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

我尝试创建自定义控件,从.vb代码动态加载。

这是文件“controlcar.ascx”中的自定义控件“ControlCar”

<%@ Control Language="VB" ClassName="ControlCar" %>
<script runat="server">
    Private m_car As Car = Nothing
    Public Property Car() As Car
        Get
            Car= m_car
        End Get
        Set(ByVal value As Car)
            m_car = value
        End Set
    End Property

    Protected Sub Panel_OnLoad(ByVal sender As Object, ByVal e As System.EventArgs)
        If Me.m_car Is Nothing Then
            lit_color.Text = "(m_car Is Nothing)"
        Else
            lit_color.Text = "color of Me.m_car is (" & Me.m_car.Color & ")"
        End If
    End Sub

</script>

<asp:Panel ID="panel" OnLoad="Panel_OnLoad" runat="server">
    this is a car<br />
    color = <asp:Literal ID="lit_color" runat="server"></asp:Literal><br />
    <br />
</asp:Panel>

这是我的ASP网页文件“cars.aspx”,它使用.vb代码进行事件,...

<%@ Page Language="vb" Explicit="true" Inherits="PageBase" Src="/code/cars.vb"%>

<html>
<body>
    <!-- Html code here --->
    <asp:panel ID="panel_cars" runat="server">
    </asp:panel>
</body>

这是我的.vb代码文件“cars.vb”

    Private Sub CreateCar()
        Dim car As Car = new Car()
        Dim control As ControlCar = Nothing
        control= CType(LoadControl("/code/controlcar.ascx"), ControlCar)
        control.Car = car
        panel_cars.Controls.Add(control)
    End Sub

但它失败了,在cars.vb中说'ControlCar'无法识别

我知道它有效,如果在.aspx文件中移动.vb代码并使用指令

<%@ Register TagPrefix="uc" TagName="ControlCar" Src="/code/controlcar.ascx" %>

但是我需要像我的例子中那样分离.vb代码和.aspx代码。

如何在.vb文件中识别'ControlCar'类型(在.ascx中定义)?

1 个答案:

答案 0 :(得分:0)

您需要添加某种参考。您可以使用参考指令:

<%@ Reference Control="controlcar.ascx" %>. 

正在动态编译控件。如果您没有引用,编译器就不知道您要使用的是什么。

编辑:

您可以使用:

Imports ASP.controlcar_ascx 

如果引用必须在后面的代码中。我过去遇到过这个问题。