我有一个控件,一个自定义按钮。此按钮位于<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示例。会转换它。
答案 0 :(得分:0)
正如您所提到的,最好的方法是通过属性实际解析值。
而且我不确定您是否可以在您正在考虑的后置场景中实际访问DataItem作为对象。
我认为您必须通过自定义控件中的控制树实际访问这些值,这不是很糟糕。
例如。假设您的转发器项目有一个名为&#34; yourLiteral&#34;在你的提交按钮旁边&#34; yourButton&#34;。 然后在&#34; yourButton&#34;的代码文件中并且它提交事件,您可以执行以下操作:
(C#)
((Literal) ((RepeaterItem) this.Parent).FindControl("yourLiteral")).Text
获取文本值。 然后替换与您相关的控件类型。