开发者

ASP.NET: Why does ListControl.Text return the *value* of the selected ListItem rather than the *text*?

List controls deriving from ListControl, such as DropDownList, ListBox or RadioButtonList, are populated by a list of ListItems. A ListItem has a Value and a Text property.

ListControl offers the following methods to access the currently selected item:

  • ListControl.SelectedItem returns the currently selected ListItem,
  • ListControl.SelectedValue returns the Value property of the currently selected ListItem.

Now, the interesting thing is:

  • ListControl.Text returns exactly the same value as ListContro开发者_如何学Cl.SelectedValue. It does not return SelectedItem.Text, as one might expect.

This is by design:

ListControl.Text Property

Gets or sets the SelectedValue property of the ListControl control.

[...]

Remarks

The Text property gets and sets the same value that the SelectedValue property does.

This seems counter-intuitive and confuses people. My question is: Why was it done this way? I can imagine that providing a Text property is necessary for implementing the ITextControl interface, but why on earth would you choose to have it return the Value of the ListItem rather than the Text?


If the code used to process an ASPX page defines all controls using the ITextControl interface, the Text property is the only property available. When processing a ListControl, most of the business logic I write cares about the value of the selected item, not the text. Thus, in my opinion, the current behavior is the desired behavior, even if it is not necessarily the expected behavior.


I checked that out before using .NET Reflector. If ListItem.Text is null, it returns ListItem.Value instead; if that is null, it returns an empty string. It works in vice versa for ListItem.Value too. So it's not the ListControl doing this, it's selected item itself.

HTH.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜