2011-03-08 27 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

相關問題