问题
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.SelectedItemreturns the currently selectedListItem,ListControl.SelectedValuereturns theValueproperty of the currently selectedListItem.
Now, the interesting thing is:
ListControl.Textreturns exactly the same value asListControl.SelectedValue. It does not returnSelectedItem.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?
回答1:
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.
回答2:
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.
来源:https://stackoverflow.com/questions/5232610/asp-net-why-does-listcontrol-text-return-the-value-of-the-selected-listitem-r