1. 程式人生 > >頁面獲取Web控制元件ID不能正常獲取,它惹得禍

頁面獲取Web控制元件ID不能正常獲取,它惹得禍

今天碰到個比較奇葩的問題,因為動了一下目標框架,又原來的4.5.1改為3.5,然後又改回來了4.5.1,結果執行專案的時候發現介面js的計算,不能正常獲值計算。

於是就開始找問題唄,先是發現這個二手專案,頁面獲取控制元件值的時候,居然直接寫死id 【不建議效仿,下文有更合適的解決方案】

例: $("#ContentPlaceHolder1_TB_ONetSellPrice").val(parseFloat(resultPrice).toFixed(2));

而原來頁面生成的是正常的,自然沒問題,但問題出現了,現在生成的ID 不是原來那個了

例:<input name="ctl00$ContentPlaceHolder1$TB_ONetSellPrice" type="text" id="ctl00_ContentPlaceHolder1_TB_ONetSellPrice" disabled="disabled">

同學們應該知道了原因吧,的確是前面的框架來回切換導致的。

本來我想直接在程式碼上改成 $("#"+"<%=TB_ODifferPrice.ClientID%>").val("");但如果只是這一個控制元件那當然好辦啊,可這牽扯到的是整個專案成千上百的控制元件。。。

想來想去還是得把這問題解決,最後發現來回切換框架的時候,配置檔案裡面發生了一個變動

捂臉,是的這個就是罪惡的根源,只要把那個pages 改成<pages>。

說到這裡,大家其實在處理伺服器控制元件,頁面獲取ID時,最好不要採取那麼死板的,其實除了上述的<%=TB_ODifferPrice.ClientID%>獲取控制元件ID 

也可以在控制元件加上ClientIDMode="Static"

 例:<asp:TextBox ID="TB_ODifferPrice" runat="server" Enabled="false" ClientIDMode="Static"></asp:TextBox>

這樣在js就可以直接$("#TB_ODifferPrice")通過控制元件ID獲取物件。