2

.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>

これは、イベントに .vb コードを使用するファイル「cars.aspx」の ASP Web ページです...

<%@ 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>

そして、これがファイル「cars.vb」の私の.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

しかし、「ControlCar」がcars.vbで認識されていないと言って失敗します。

.aspxファイルで.vbコードを移動し、ディレクティブを使用すると、機能することがわかります

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

しかし、私の例のように .vb コードと .aspx コードを分離する必要があります。

.vb ファイルで「ControlCar」タイプ (.ascx で定義) を認識させるにはどうすればよいですか?

4

1 に答える 1

0

何らかの参照を追加する必要があります。参照ディレクティブを使用できます。

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

コントロールは動的にコンパイルされています。参照がない場合、コンパイラは何を使用しようとしているのかわかりません。

編集:

以下を使用できる場合があります。

Imports ASP.controlcar_ascx 

参照がコード ビハインドにある必要がある場合。私は過去にこれに問題がありました。

于 2013-01-07T17:55:11.383 に答える