使用项模板(转发器)中的自定义控件,如何访问转发器项中的值?



我有一个控件,一个自定义按钮。此按钮位于<ItemTemplate>内部。我需要从它的父级<ItemTemplate>访问数据绑定值。

例如,<%#Eval("Firstname")%>可以在<ItemTemplate>中完成,但不能在控件本身中完成,而只能通过属性标记公开值。

注意:我知道如何通过属性/属性标记传递这些值。在这种情况下我不能那样做。

我一直在玩DataBinder.Eval,但似乎无法访问我需要的内容。

尝试示例:

Dim parent As RepeaterItem = CType(Me.NamingContainer, RepeaterItem)
Dim test = DataBinder.Eval(parent.DataItem, "Firstname")
test = DataBinder.Eval(Me.NamingContainer, "DataItem.Firstname")
test = DataBinder.Eval(DirectCast(DirectCast(parent, RepeaterItem), IDataItemContainer).DataItem, "Firstname")

我以前从来没有这样做过,我也想严格地从代码后面做到这一点。我可以爬上控制树,看到"NamingContainer"实际上是我的中继器。

我是不是错过了什么?欢迎使用C#或VB.net示例。将转换它。

正如您所提到的,最好的方法是通过属性实际解析值。

我不确定你是否真的可以在你考虑的后台场景中访问DataItem作为对象

我认为您必须通过自定义控件的控件树来访问值,这并不可怕。

例如。假设你的中继器项目在提交按钮"yourButton"旁边有一个名为"yourLiteral"的文字。然后在"yourButton"的代码文件及其提交事件中,您可以执行以下操作:

(C#)

  ((Literal) ((RepeaterItem) this.Parent).FindControl("yourLiteral")).Text

以获取文本值。然后替换与您相关的控件类型。

最新更新