2013-01-07 2 views
1

Je tente de créer un contrôle personnalisé, chargé dynamiquement à partir du code .vb.ASP .net: enregistrer le contrôle personnalisé à partir du code .vb

Voici mon contrôle personnalisé "ControlCar" dans le fichier "controlcar.ascx"

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

Voici ma page web ASP dans le fichier "cars.aspx" qui utilisent .vb code pour les événements, ...

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

Et voici mon code .vb dans le fichier "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 

Mais il fa ils, en disant «ControlCar» n'est pas reconnu dans cars.vb.

Je sais que cela fonctionne, si le code de déplacement dans le fichier .aspx et en utilisant la directive

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

Mais je dois séparer le code .vb et le code .aspx comme dans mon exemple.

Comment puis-je faire reconnaître le type 'ControlCar' (défini dans .ascx) dans le fichier .vb?

Répondre

0

Vous devez ajouter une sorte de référence. Vous pouvez utiliser une directive de référence:

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

Le contrôle est en cours de compilation dynamique. Si vous n'avez aucune référence, le compilateur n'a aucune idée de ce que vous essayez d'utiliser.

EDIT:

Vous pourrez peut-être utiliser:

Imports ASP.controlcar_ascx 

Si la référence doit être dans le code derrière. J'ai eu des problèmes avec cela dans le passé cependant.

+0

En code .vb?! <% @ Reference%> est un code ASP. – TheFrancisOne

+1

@TheFrancisOne La question concerne ASP.NET. Avez-vous vraiment voté pour cela? –

Questions connexes