簡體   English   中英

如何在自定義控件中呈現數據綁定值?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM