[英]How can I render databound values inside of a custom control?
我將自定義控件放在現有的中繼器模板中。
<ItemTemplate>
<custom:MyControl>
<something>
<%# Eval("Firstname") %>
</something>
</custom:MyControl>
</ItemTemplate>
有什么方法可以以某種方式獲得<%# Eval("Firstname") %>
而不將其作為屬性添加到我的自定義控件中?
<custom:MyControl Firstname='<%# Eval("Firstname") %>' />
我有一個更大的需求,因為我想在<something>
內定義整個html結構化的內部屬性,而在屬性內進行此操作將是一個災難。
因此,我的中繼器是數據綁定的,顯然我放置在其中的控件不是數據綁定的,但是值可以通過屬性標簽傳遞...
我發現另一個答案表明這是不可能的,但這也是5年的歷史了。 ASP.net中繼器中的Eval在另一個控件中不起作用
抓住稻草,希望找到解決方案。
您必須使用屬性具有TemplateContainer
屬性來創建模板化的用戶控件。 有關示例,請參見以下文章。
我能夠弄清楚這一點,我想說我沒有更早弄清這一點的唯一原因是由於測試了每種方法的組合,但是卻錯過了每種方法的重要組成部分。
<ParseChildren(False)>
Public Class Something
Inherits Button ' Just picked something
Public Property InnerStuff() AS String
Protected Overrides Sub OnLoad(e As EventArgs)
EnsureChildControls()
If HasControls() Then
' Interesting, if Eval() has taken place, a
' DataBoundLiteralControl is created as a child
' control.
If TypeOf Controls(0) Is DataBoundLiteralControl Then
Dim instance As DataBoundLiteralControl = CType(Controls(0), DataBoundLiteralControl)
' I can push the text into a property
InnerStuff = instance.Text
' If no databinding occurred, it creates LiteralControl
ElseIf TypeOf Controls(0) Is LiteralControl Then
Dim instance As LiteralControl = CType(Controls(0), LiteralControl)
InnerStuff = instance.Text
End If
MyBase.OnLoad(e)
End Sub
End Class
也許有一種更清潔的方法,但這似乎可行,我的標記現在看起來像這樣:
<custom:MyControl>
Inner text, with or without <%#Eval("...")%>
</custom:MyControl>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.