基本上,我的问题是:我有两种方法可以为数据绑定控件设置值。这样:
<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”。谁能告诉我为什么会这样呢?
答案 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)
不确定但是......可能是因为在第二个示例中,Text
是Label
控件的属性,您可以直接设置它,而在第一个示例中,您是'我没有设置Text
属性,只是将一个孩子添加到Label
...
编辑:使用Reflector快速查看一下:如果Label
有一些子内容,那就是呈现为html的内容(但它永远不会设置为Text
属性) 。否则,它是呈现的Text
属性的内容。