Avatar billede ml Nybegynder
04. august 2006 - 14:45 Der er 8 kommentarer

Set Attribuet på User Control ved dynamisk tilføjelse

Jeg har en class hvor følgende Custom Control:

-------------------------------------

    'Insert Text - Custom Control
    Public Shared Function InsertTextCC(ByVal ElementID As Integer) As Control

        Dim TextControl As New CMSElements.Text.TextControl

        'Set Control properties
        TextControl.ID = ElementID
        TextControl.Content = "Tekst til Custom Control"

        Return TextControl

    End Function

-------------------------------------

Blvier tilføjet til en ContentPlaceHolder på en MasterPage, med denne funktion:

-------------------------------------

    Public Shared Function AddControlToContentPlaceHolder(ByVal ElementID As Integer, ByVal ContentPlaceHolder As ContentPlaceHolder, ByVal CacheExpires As Integer) As Boolean

        Dim AddAtIndex As Integer

        'Index the control is added to (order of elements)
        AddAtIndex = 1

        Dim ControlToAdd As Control 'BasePartialCachingControl

        'TextElement
        ControlToAdd = CMS.InsertTextUC(ElementID)

        'Set when cache expires
        'ControlToAdd.CachePolicy.SetExpires(DateTime.Now.Add(TimeSpan.FromSeconds(CacheExpires)))

        ContentPlaceHolder.Controls.AddAt(AddAtIndex, ControlToAdd)

    End Function

-------------------------------------

Hvilket virker fint. Men hvis jeg vil gøre det samme med en User Control, kan jeg ikke få den til at acceptere atributten "Content":

-------------------------------------

    'Insert Text - User Control
    Public Shared Function InsertTextUC(ByVal ElementID As Integer) As Control

        'Load Text UserControl
        Dim TextControl As Control = mMasterPage.LoadControl("~/UserControls/Elements/Text.ascx")

        'Set Control properties
        TextControl.ID = ElementID
        'TextControl.Content = "Tekst til User Control"

        Return TextControl

    End Function

-------------------------------------

VB koden til User Controlen ser ud som følger:

-------------------------------------

Imports System.Web.UI.WebControls

'<PartialCaching(0)> _
Partial Class UserControls_Elements_Text
    Inherits System.Web.UI.UserControl

    Private mContent As String = "Test text 123"

    Public Property Content() As String

        Get
            Return (mContent)
        End Get

        Set(ByVal value As String)
            mContent = value
        End Set

    End Property

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

        TextLiteral.Text = mContent
        LoadTime.Text = Now()

        'Me.CachePolicy.SetExpires(DateTime.Now.Add(TimeSpan.FromSeconds(5)))

    End Sub

End Class

-------------------------------------

Hvordan får jeg sat atributten på User Controlen, når jeg tilføjer den?
Avatar billede snepnet Nybegynder
04. august 2006 - 15:15 #1
Prøv
Dim TextControl As Control = CType(mMasterPage.LoadControl("~/UserControls/Elements/Text.ascx"), TextControl)
Mvh
Avatar billede ml Nybegynder
05. august 2006 - 17:28 #2
Den melder bare fejl: "Type 'TextControl' is not defined." på linien med:
Dim TextControl As Control = CType(mMasterPage.LoadControl("~/UserControls/Elements/Text.ascx"), TextControl)

:)
Avatar billede snepnet Nybegynder
05. august 2006 - 21:06 #3
Så skriv typen fuldt ud:
CMSElements.Text.TextControl
Eller sæt en Imports ind i toppen.
Mvh
Avatar billede ml Nybegynder
07. august 2006 - 11:50 #4
Det vil den ikke. Jeg har nu lavet usercontrolen om til følgende:

Text.ascx:
----------------------

<%@ Control Language="VB" ClassName="TextControlUC" AutoEventWireup="false" CodeFile="Text.ascx.vb" Inherits="CMSelm.TextControlUC" %>

<asp:Literal ID="TextLiteral" runat="server"></asp:Literal>
<asp:Label ID="LoadTime" runat="server" Text="Label"></asp:Label>

-----------------

Text.ascx.vb:
-------------------

Imports System.Web.UI.WebControls

Namespace CMSelm

    '<PartialCaching(0)> _
    Public Class TextControlUC
        Inherits System.Web.UI.UserControl

        Private mContent As String = "Test text 123"

        Public Property Content() As String

            Get
                Return (mContent)
            End Get

            Set(ByVal value As String)
                mContent = value
            End Set

        End Property

        Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

            TextLiteral.Text = mContent
            LoadTime.Text = Now()

            'Me.CachePolicy.SetExpires(DateTime.Now.Add(TimeSpan.FromSeconds(5)))

        End Sub

    End Class

End Namespace

-------------------

Men lige meget hvordan jeg skriver det vil den ikke acceptere eller importere den.

Burde man ikke kunne få fat i den via CMSelm.TextControlUC ?
Avatar billede snepnet Nybegynder
07. august 2006 - 12:16 #5
Jeg går ud fra at din kontrol ligger i samme webprojekt som den side hvorpå du bruger den, men kan du ikke vise mig den kode

Jeg kan ikke se alt hvad du har lavet, men du kan få et eksempel her:
Hvis du har en emailadresse kan jeg også godt sende det til dig.

// Din kontrol:

<%@ Control Language="VB" AutoEventWireup="false" CodeFile="SomeUserControl.ascx.vb" Inherits="SpecialControls.SomeUserControl" %>
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox><asp:Button ID="Button1" runat="server" Text="Button" />

// Og kontrollens kode:

Namespace SpecialControls
    Partial Class SomeUserControl
        Inherits System.Web.UI.UserControl


        Private mContent As String = "Test text 123"

        Public Property Content() As String
            Get
                Return (mContent)
            End Get

            Set(ByVal value As String)
                mContent = value
            End Set

        End Property

        Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
            TextBox1.Text = Content
        End Sub
    End Class
End Namespace

// Så din form

<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="_Default" %>

<%@ Register Src="SomeUserControl.ascx" TagName="SomeUserControl" TagPrefix="uc1" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
        <uc1:SomeUserControl ID="SomeUserControl1" runat="server" Content="Blah" />
    </form>
</body>
</html>

// og koden til den

Imports SpecialControls
Partial Class _Default
    Inherits System.Web.UI.Page

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        ' Du kan skrive klassen navn fuldt ud
        Dim k1 As SpecialControls.SomeUserControl = LoadControl("SomeUserControl.ascx")
        k1.Content = "Yuhah"

        ' Eller sætte en Imports i toppen og blot gøre sådan her
        Dim k2 As SomeUserControl = LoadControl("SomeUserControl.ascx")
        k2.Content = "Jabadabaduu"
        form1.Controls.Add(k2)
    End Sub
End Class


Mvh
Avatar billede snepnet Nybegynder
07. august 2006 - 12:17 #6
Ovenstående fungerer uden ballade, så du burde kunne finde ud af hvad det er du mangler i din egen kode.
Mvh
Avatar billede ml Nybegynder
08. august 2006 - 14:38 #7
Det virker fint når man gør det i en aspx.vb fil hvis aspx fil har den registreret (<%@ Register ...). Er den ikke registreret eller er det i en Custom Class (f.eks. som min App_Code/CMS.vb) virker det ikke.

Den skriver blot: "Type 'SpecialControls.SomeUserControl' is not defined."
Avatar billede snepnet Nybegynder
08. august 2006 - 14:43 #8
Gør klassen public:
Partial Class SomeUserControl
Mvh
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester