使用ItemTemplate(Repeater)内部的自定义控件,如何从转发器项访问值?

时间:2016-04-19 04:59:50

标签: c# asp.net vb.net

我有一个控件,一个自定义按钮。此按钮位于<ItemTemplate>内。我需要从其父代<ItemTemplate>

访问数据绑定值

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

注意:我知道如何通过property / attribute标记传递这些值。在这种情况下,我无法做到这一点。

我一直在玩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”实际上是我的repeateritem。

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

1 个答案:

答案 0 :(得分:0)

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

而且我不确定您是否可以在您正在考虑的后置场景中实际访问DataItem作为对象。

我认为您必须通过自定义控件中的控制树实际访问这些值,这不是很糟糕。

例如。假设您的转发器项目有一个名为&#34; yourLiteral&#34;在你的提交按钮旁边&#34; yourButton&#34;。 然后在&#34; yourButton&#34;的代码文件中并且它提交事件,您可以执行以下操作:

(C#)

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

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