Asp.net 访问数据绑定项控件时出现不一致

Asp.net 访问数据绑定项控件时出现不一致,asp.net,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, "

本质上,我的问题是:我经历过两种为数据绑定控件设置值的方法。无论哪种方式:

<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")%> />

或者这样:

<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”。有人能告诉我为什么会这样吗?

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


编辑:使用Reflector快速查看确认了这一点:如果
标签
包含一些子内容,则将该内容呈现为html(但它从未设置为
文本
属性)。否则,呈现的是
文本
属性的内容。

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


编辑:使用Reflector快速查看确认了这一点:如果
标签
包含一些子内容,则将该内容呈现为html(但它从未设置为
文本
属性)。否则,将呈现
文本属性的内容。

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

使用绑定时将文本视为空的原因是,绑定文本在MyLabel.Controls集合中呈现为子文本控件。在本例中,您可以通过以下方式访问文本:

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

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

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

使用绑定时将文本视为空的原因是,绑定文本在MyLabel.Controls集合中呈现为子文本控件。在本例中,您可以通过以下方式访问文本:

var myText = ((ITextControl)MyLabel.Controls[0]).Text;
// instead of..
var myText = MyLabel.Text;
如果要访问标签的文本,请始终使用“文本”属性。如果要在标签中嵌套控件,请将它们放在标记标记之间