2009-06-05 15 views
1

本質上,我的問題是這樣的:有兩種方法,我已經設置了數據綁定控件的值。無論是這樣的:當訪問DataBound項目控件時的不一致性

<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」。誰能告訴我爲什麼會發生這種情況?

回答

1

標籤的Text屬性不會映射到控件標記中的內部文本。 Label控件可以用作其他控件的容器 - 所以你可以將子控件放在標籤中。

當您使用<%#...%>綁定文本時看到文本爲空的原因是因爲綁定文本正在呈現爲MyLabel.Controls集合中的子文字控件。在這種情況下,您可以訪問文本爲

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

如果要訪問標籤的文本 - 請始終使用Text屬性。如果您想在標籤中嵌套控件 - 將它們放在標記標籤之間。

0

不確定這個,但是...可能是因爲在第二個示例中,TextLabel控件的屬性,您直接設置它,而在第一個示例中,您沒有設置Text屬性,你只是添加一個孩子到Label ...

編輯:用Reflector快速瀏覽證實了這一點:如果Label有一些子內容給它,它是呈現給html的內容(但它永遠不會設置爲Text屬性)。否則,它是呈現的Text屬性的內容。