webForumDet fria alternativet

UC i itemtemplate (DataList)

.NET

16 svar · 791 visningar · startad av Travoni

Medlem sedan okt. 20041 556 inlägg
Frågan#1

UC'n (RÖD) "får aldrig något värde" medans Labelen (BLÅ) "får ett"?

<asp:DataList ID="DataList1" runat="server">
        <HeaderTemplate>
            <table>
               <tr> 
        </HeaderTemplate>
        <ItemTemplate> 
                <td>
                     [blue]<asp:Label runat="server" ID="testar" Text='<%#DataBinder.Eval(Container.DataItem, "oText")%>' />[/blue]
                     [red]<ia:bubble runat="server" ID="bubbla" Text='<%#DataBinder.Eval(Container.DataItem, "oText")%>' />[/red]
                </td> 
        </ItemTemplate>
        <FooterTemplate>
                </tr>
            </table>
        </FooterTemplate>
    </asp:DataList>

Vad beror detta på?
Det är ju annars identiska.

Tilläggas bör att uc'n funkar perfekt utanför DataListen.

Medlem sedan maj 20033 218 inlägg
#2

Travoni skrev:

<td>
<asp:Label runat="server" ID="testar" Text='<%#DataBinder.Eval(Container.DataItem, "oText")%>' />
<ia:bubble runat="server" ID="bubbla" Text='<%#DataBinder.Eval(Container.DataItem, "oText")%>' />
</td>

skall det vara <ia ??

Medlem sedan okt. 20041 556 inlägg
#3

Javisst, det är TagPrefixet på min UC, skulle det var fel?

Medlem sedan okt. 20041 556 inlägg
#4

Något tips av någon kanske? :r

Medlem sedan feb. 2005280 inlägg
#5

Sorry men jag har aldrig gjort på detta viset :OO

Medlem sedan jan. 20011 140 inlägg
#6

Hur ser koden i uc:n ut? Jag gör på samma sätt och det fungerar, även när jag lägger uc:n i en datalist

Medlem sedan okt. 20041 556 inlägg
#7

OK, så här:

<%@ Control Language="VB" AutoEventWireup="false" CodeFile="infoBubble.ascx.vb" Inherits="userControls_infoBubble" %>
&nbsp;<img src="/assets/icons/info.gif" alt="" width="12" id="bubble" style="border:none" runat="server" />&nbsp;
<asp:Label runat="server" ID="bubblelbl" CssClass="bubble" />

[red][B]CodeFile:[/B][/red]

Partial Class userControls_infoBubble
    Inherits System.Web.UI.UserControl
    Public Property Text() As String
        Get
            Return _text
        End Get
        Set(ByVal value As String)
            _text = value
        End Set
    End Property
    Private _text As String

    Sub page_load(ByVal s As Object, ByVal ev As EventArgs) Handles MyBase.Load
        If Not Me.Page.ClientScript.IsClientScriptBlockRegistered("bubble") And Me.Visible Then
            Dim script As String = "<script type=""text/javascript"">function bubble(e){var elm = document.getElementById(e);elm.style.display =(elm.style.display==""block"")?""none"":""block"";};</script><style type=""text/css"">.bubble{ display:none; width:150px; margin-left:20px; position:absolute; border:1px solid #EEAC04; padding:3px; font-size:11px; background-color:#FFFFFF; z-index:100;}</style>"
            Me.Page.ClientScript.RegisterClientScriptBlock(Me.GetType, "bubble", script)
        End If
        Me.bubble.Attributes.Add("onclick", "bubble('" & Me.bubblelbl.ClientID & "')")
        Me.bubblelbl.Text = Text
    End Sub
End Class
Medlem sedan jan. 20011 140 inlägg
#8

Kopierade din kod och den fungerar när jag kör den

Medlem sedan okt. 20041 556 inlägg
#9

Helt otroligt, fattar inte vad som felar.
Den funkar ju utanför DataListen och värdet skrivs till Labelen i detta fall:

<asp:Label runat="server" ID="testar" Text='<%#DataBinder.Eval(Container.DataItem, "oText")%>' />

<ia:bubble runat="server" ID="bubbla" Text="Test text"/>
Funkar ju också.

Men i DataListen funkar det inte.
Hur går jag vidare?

Medlem sedan okt. 20041 556 inlägg
#10

En trace ser utså här:

Begin PreInit   
aspx.page End PreInit
aspx.page Begin Init
aspx.page End Init 
aspx.page Begin InitComplete
aspx.page End InitComplete
aspx.page Begin PreLoad
aspx.page End PreLoad 
aspx.page Begin Load
[red] UC Property Text SET: Farm Ale 
 UC Property Text SET: Old gold 
 Page_Load i UC Text: Farm Ale
 Page_Load i UC Text: Old gold [/red] 
aspx.page End Load 
aspx.page Begin LoadComplete 
aspx.page End LoadComplete 
aspx.page Begin PreRender 
[red] Page_Load i UC Text: 
 UC Property Text SET: Farm Ale 
 Page_Load i UC Text:
 UC Property Text SET: Old gold [/red]   
aspx.page End PreRender 
aspx.page Begin PreRenderComplete 
aspx.page End PreRenderComplete
aspx.page Begin SaveState 
aspx.page End SaveState 
aspx.page Begin SaveStateComplete 
aspx.page End SaveStateComplete
aspx.page Begin Render
aspx.page End Render

Varpå man kan se att Texten försvinner i PreRender.

Medlem sedan okt. 20041 556 inlägg
#11

Samma sak, är det något annat jag kan visa/göra?

Medlem sedan sep. 2005673 inlägg
#12

Har du testat att göra en ny uc som ser exakt lika ut? Kanske är något annat som flippat (tänkte på det här med partial classes, kanske ligger felet där bakom?).

Medlem sedan okt. 20041 556 inlägg
#13

Nu har jag kommit på det, men inte vad jag skall göra åt det.
Om jag kopplar datasourcen direkt till repeatern så funkar det, men i min CustomPagerControl så binds datan om i prerender.
Det verkar vara där datan försvinner.

Protected Overrides Sub OnPreRender(ByVal e As EventArgs)
            If (Me.PagingMode = pagingmodetype.querystring) Then
                Me.BindToQueryString()
            End If
            Me._PagedDataSet.CurrentPageIndex = (Me._CurrentPage - 1)
            If (((Me.PageCount <= 1) AndAlso (Not Me.Context Is Nothing)) AndAlso Me.HideOnSinglePage) Then
                Me.Visible = False
            Else
                Me.BuildControl()
            End If
            If (Me._BindToControl.Length > 0) Then
                [B]Dim ctrl As Control = Me.Page.FindControl(Me._BindToControl)[/B]
                If (Not ctrl Is Nothing) Then
                    [B]ctrl.DataBind()[/B]
                End If
            End If
            MyBase.OnPreRender(e)
        End Sub
Medlem sedan okt. 20041 556 inlägg
#14

freguz skrev:

Sorry men jag har aldrig gjort på detta viset :OO

Hur skulle du gjort då?

Medlem sedan okt. 20041 556 inlägg
#15

Detta står fortfarande olöst, någon som har ngt tips kanske?

Medlem sedan jan. 20022 440 inlägg
#16

Förmodligen är det ingen av våra experter som har tid att hjälpa till just nu vilket iofs inte är så konstigt då julen närmar sig med stormsteg.

Jag hade gärna hjälpt dig men det överstiger mitt förstånd ;) Om du stegar igenom din Protected Overrides Sub OnPreRender(ByVal e As EventArgs) vad händer då?

Du kanske kan ha någon nytta av http://msdn2.microsoft.com/en-us/library/ms178472.aspx#databindingevents då det verkar vara vad som strular. Datan skrivs men är tom sa du?

Medlem sedan okt. 20041 556 inlägg
#17

Jo, presis.
Kontrollens data sätts efter! att den "skrivits ut" vilket såklart leder till att resultatet blir tomt.

Alltså i PageLoad så ser det rätt ut, men när kontrollen binds om i prerender så försvinner värdet.
Page_Load i UC Text:
UC Property Text SET: Old gold

273 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
130 ms — deklarationer (db)
0 ms — hämta statistik (cache)
139 ms — hämta tråd, inlägg och bilagor (db)
131 ms — ändringar (db)