源自ListControl
的列表控件(例如DropDownList
,ListBox
或RadioButtonList
)由ListItem
列表填充。 ListItem
具有Value
和Text
属性。
ListControl
提供了以下方法来访问当前选定的项目:
ListControl.SelectedItem
返回当前选中的ListItem
,ListControl.SelectedValue
会返回当前所选Value
的{{1}}属性。现在,有趣的是:
ListItem
返回与ListControl.Text
完全相同的值。它确实不返回ListControl.SelectedValue
,正如人们所期望的那样。这是by design:
ListControl.Text属性
获取或设置ListControl控件的SelectedValue属性。
[...]
说明
Text属性获取并设置SelectedValue属性的相同值。
这似乎违反直觉confuses people。我的问题是:为什么这样做?我可以想象,提供SelectedItem.Text
属性对于实现Text
接口是必要的,但是为什么你会选择让它返回ListItem的ITextControl
而不是{{1} }}?
答案 0 :(得分:0)
我在使用.NET Reflector之前检查了一下。如果ListItem.Text为null,则返回ListItem.Value;如果为null,则返回空字符串。对于ListItem.Value,它的反之亦然。所以这不是ListControl这样做的,它是选择的项目本身。
HTH。
答案 1 :(得分:0)
如果用于处理ASPX页面的代码使用ITextControl
接口定义所有控件,则Text
属性是唯一可用的属性。处理ListControl
时,我写的大多数业务逻辑都关心所选项的值,而不是文本。因此,在我看来,当前的行为是理想的行为,即使它不一定是预期的行为。