2011-03-08 55 views
2

ASP.NET中的下拉列表的这两个属性可以独立使用吗?可以单独使用下拉列表的值和文本属性吗?

我想在用户选择某些文本时检索null值;我不能因为它检索Text属性,只要Valuenull。例如:

l1 = new ListItem("Cat", null); 
Console.WriteLine(l1.Value); 

输出是

在另一种情况下,当这两个属性有不同的字符串,我得到的Value属性字符串时,我使用Text属性。例如:

l2 = new ListItem("Cat", "Mouse"); 
DropDownList ddl = new DropDownList(); 
ddl.Items.Add(li); 
ddl.SelectedIndex = 0; 
Console.WriteLine(ddl.SelectedValue); 
Console.WriteLine(ddl.Text); 

输出是

鼠标
鼠标

+0

这听起来很奇怪。你能发表一个你正在遇到的问题的小例子吗? – Heinzi 2011-03-08 11:56:00

+0

第1点为真 - 如果值为空,将使用文本, 第2点听起来不正确 - 文本将用于文本和值填充,并且您访问文本 – longhairedsi 2011-03-08 11:58:08

+0

@ Heinzi:现在清楚了吗?@longhairedsi:是它的奇怪,但我获得Value属性,当我访问文本和值... – Harish 2011-03-08 12:18:04

回答

2

你的观察是正确的。与直觉告诉我们的情况相反,ListControl.Text(并且因此DropDownList.Text不是返回Text属性的当前选择的ListItem。下面是the documentation的摘录:

ListControl.Text物业

获取或设置列表控件控制的SelectedValue属性。

[...]

备注

Text属性获取和设置的SelectedValue属性不相同的值。

获取所选ListItemText属性,请使用SelectedItem检索当前选中的列表项,然后访问Text属性。

所以,你看到的行为是通过设计。为什么.NET开发人员以这种不直观的方式指定ListControl.Text?我不知道。也许有必要支持ITextControl接口...

+0

是啊现在,我可以通过首先检索'SelectedItem'来访问'Text'属性。谢谢。该死的权利反直觉。 – Harish 2011-03-08 12:35:01

+0

我已经添加了一个关于此设计决定的原因的问题:http://stackoverflow.com/questions/5232610。也许有人知道更多关于这个...... – Heinzi 2011-03-08 12:44:29

0

只需将值设置为一些哨兵值像一个空字符串或一些疯狂的字符串 “JANDKJASD_” 和相应地处理它。

+0

一个哨兵可以解决第一个问题。第二个呢?另外,再次使用空字符串会导致Value属性与Text属性相同。 – Harish 2011-03-08 12:20:14