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 ??
16 svar · 791 visningar · startad av Travoni
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.
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 ??
Javisst, det är TagPrefixet på min UC, skulle det var fel?
Något tips av någon kanske? :r
Sorry men jag har aldrig gjort på detta viset :OO
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
OK, så här:
<%@ Control Language="VB" AutoEventWireup="false" CodeFile="infoBubble.ascx.vb" Inherits="userControls_infoBubble" %>
<img src="/assets/icons/info.gif" alt="" width="12" id="bubble" style="border:none" runat="server" />
<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
Kopierade din kod och den fungerar när jag kör den
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?
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.
Samma sak, är det något annat jag kan visa/göra?
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?).
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
Detta står fortfarande olöst, någon som har ngt tips kanske?
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?
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