访问DataBound项控件时出现不一致

时间:2009-06-05 21:02:27

标签: asp.net

基本上,我的问题是:我有两种方法可以为数据绑定控件设置值。这样:

<asp:Label runat="server" id="MyLabel"><%#DataBinder.Eval(Container.DataItem, "MyValue")%></asp:Label>

或者这样:

<asp:Label runat="server" id="MyLabel" text=<%#DataBinder.Eval(Container.DataItem, "MyValue")%> />

当尝试使用第一种方法访问事件处理程序中的项目(在此数据绑定发生的方法之外)时,MyLabel.Text是一个空字符串。但是,使用第二种方式,MyLabel.Text将等于“MyValue”。谁能告诉我为什么会这样呢?

2 个答案:

答案 0 :(得分:1)

Label的Text属性不会映射到控件标记中的内部文本。 Label控件可以用作其他控件的容器 - 因此您可以将子控件放在标签内。

使用&lt;%#...%&gt;进行绑定时,您看到Text为空的原因是因为绑定文本在MyLabel.Controls集合中呈现为子文字控件。在这种情况下,您可以将文本作为

进行访问
var myText = ((ITextControl)MyLabel.Controls[0]).Text;
// instead of..
var myText = MyLabel.Text;

如果要访问标签的文本 - 请始终使用Text属性。如果要在标签中嵌套控件 - 将它们放在标记标记之间。

答案 1 :(得分:0)

不确定但是......可能是因为在第二个示例中,TextLabel控件的属性,您可以直接设置它,而在第一个示例中,您是'我没有设置Text属性,只是将一个孩子添加到Label ...

编辑:使用Reflector快速查看一下:如果Label有一些子内容,那就是呈现为html的内容(但它永远不会设置为Text属性) 。否则,它是呈现的Text属性的内容。