[討論] 關於ASP.NET的DropDownList

看板Web_Design作者 (人生只有一次)時間16年前 (2009/08/22 01:13), 編輯推噓8(8020)
留言28則, 7人參與, 最新討論串1/1
最近才發現微軟的DropDownList有很奇怪的問題 就是Text不同~但Value相同就出問題了~它永遠只會找到第一個Value 範例很簡單~將Text和Value設定如下: 張三 1 李四 2 王五 1 這時如果我選了李四~很自然SelectedIndex和SelectedValue是得到1和2 可是如果我選了王五~那index和value就會得到0和1... 這未免也太奇怪了吧... 因為主管曾告訴我一句話:通常你不會是第一個遇到這種問題 所以我就上網Google了... 果然...早在2005年就有大陸人的討論 直到2008年10月才看到台灣人把dropdownlist控制項方法Overrides掉的解法 (到底是誰解的~不是重點~我不想討論那個XD 麻煩不要針對這個發言) 這...會不會太誇張了? 明明控制項提供的方法名稱就叫做SelectedIndexChanged 在__doPostBack時卻是回傳value值... VS都已經出到2008了~這個問題還要使用者自己解決? 難道使用者不能很單純的設計一個不同東西但是同樣價錢的選單? 沒寫過jsp之前~我可能會覺得這不太像bug 寫過jsp和javascript後~我會覺得...用value判斷選到哪個~還真是天才... -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.33.162.181 ※ 編輯: andymai 來自: 114.33.162.181 (08/22 01:16)

08/22 03:07, , 1F
通常做選單我會避免key/value的重複
08/22 03:07, 1F

08/22 03:08, , 2F
正解應該是內部要用index=>(text,value)
08/22 03:08, 2F

08/22 03:09, , 3F
看起來內部直接把value當成index了
08/22 03:09, 3F

08/22 03:12, , 4F
就菜單價錢而言 重要的應該只有value, text跟index
08/22 03:12, 4F

08/22 03:12, , 5F
其實可以忽略XD
08/22 03:12, 5F

08/22 16:53, , 6F
個人也覺得重點是 value,所以用 value 判斷似無不妥... ?
08/22 16:53, 6F

08/22 20:14, , 7F
我覺得這樣很不妥~但是也不能怎樣!XD 1.1時就這知道了
08/22 20:14, 7F

08/22 22:19, , 8F
先天的缺陷呀~
08/22 22:19, 8F

08/23 04:59, , 9F
這個是 ASP.Net Event Driven __doPostBack 的設計問題,
08/23 04:59, 9F

08/23 04:59, , 10F
不過其實也還好解決~
08/23 04:59, 10F

08/23 05:04, , 11F
也不需要動用到 Overrides 的做法,太累人了~
08/23 05:04, 11F
那...請問樓上是怎麼做?用javascript拿到index後存在某個欄位再傳回去嗎?還是? ※ 編輯: andymai 來自: 114.33.162.181 (08/23 15:41)

08/23 16:25, , 12F
先移掉 DropDownList 上所有事件,再自已在 DropDownList
08/23 16:25, 12F

08/23 16:26, , 13F
增加 Attribute onChange ,然後叫用 ASP.Net 的 __doPost
08/23 16:26, 13F

08/23 16:27, , 14F
Back 事件,沒有這個 JavaScript function 的話使用
08/23 16:27, 14F

08/23 16:28, , 15F
GetPostBackEventReference 做一個,再把前端DropDownLis
08/23 16:28, 15F

08/23 16:28, , 16F
的 this.selectedIndex 傳入 EventArgument ,在 Server
08/23 16:28, 16F

08/23 16:29, , 17F
端在 Page_Load 使抓 Request.From["_EventTARGET"] 和
08/23 16:29, 17F

08/23 16:30, , 18F
EVENTARGUMENT 攔到 DropDownList1 後寫一個自已的Method
08/23 16:30, 18F

08/23 16:30, , 19F
把 Server 的 SelectedIndex 設成 Client 的 SelectIndex
08/23 16:30, 19F

08/23 16:31, , 20F
聽起來很複雜其實就7行程式碼就搞定...
08/23 16:31, 20F
您的解法其實跟我說的overrides掉的解法很像~都是在onChange上做手腳 取代原來的__doPostBack

08/23 16:32, , 21F
最簡單的偷雞是在Binding完後 foreach DropDownList 的
08/23 16:32, 21F

08/23 16:33, , 22F
Item 然後把 ListItem 的 Value +":" + Text ,要取值時再
08/23 16:33, 22F

08/23 16:34, , 23F
split(':')[0] 就抓的到了... 囧
08/23 16:34, 23F
這個解法畢竟是偷雞...個人不會採用這個來增加自己的困擾XD 謝謝您的分享 ※ 編輯: andymai 來自: 114.33.162.181 (08/24 00:43)

08/24 11:13, , 24F
我是認為去抓dropdownlist 的 index才是偷雞...XD
08/24 11:13, 24F
?為啥?願聞其詳... ※ 編輯: andymai 來自: 220.130.243.97 (08/24 12:19)

08/24 13:35, , 25F
從web的角度來看 , 收資料的一方本來就只該拿到value.
08/24 13:35, 25F
所以如果使用者說他要弄一個這樣的選單~那該怎麼辦? 真的有自己動工的必要?弄得跟自己寫自己撈一樣麻煩 .net自家的控制項還有它的價值...? 我只是要一組對的text和value而已啊...

08/24 13:36, , 26F
如果要說這是.net的特有文化那倒也無妨啦(遠目)
08/24 13:36, 26F
但因為這樣使得.net連Text都弄錯了~連原來指向什麼都不知道 那使用者在點了選項的同時~不改寫就沒辦法知道他點了哪個東西? 用index或許不太對~那沒有辦法中的辦法~至少也該把Text一併傳回來吧... 好笑的是~方法名稱還取成"SelectedIndexChanged"...

08/24 17:07, , 27F
看了一下之後我覺得......我還是乖乖寫PHP就好
08/24 17:07, 27F
還好吧...我只是看到人家寫的控制項不好用而已... 之前寫Jsp就用學長寫好的tag library... 學長沒寫~還是自己動手啊... ※ 編輯: andymai 來自: 114.33.162.181 (08/24 22:52)

08/25 15:38, , 28F
我是說,ASP.NET用桌上程式的那招來開發,我好難適應啊XD
08/25 15:38, 28F
文章代碼(AID): #1AZjNAn6 (Web_Design)