在項目中需要這樣一個指令碼效果:
目的:實現的效果:也就是說當使用者在審定金額中輸入數字金額後是,通過指令碼根據演算法在右邊的審減率中自動的算出來。而且右邊的審減率的文字框不能通過使用者直接輸入,只能通過在審定金額填寫完後自動算出。而且當頁面發送到伺服器端後審減率的文字框還存在。
這個問題當時絕對很簡單的。通過指令碼演算法給文字框中賦值而已。(審減率是唯讀)然而當在伺服器端擷取文字框的時候就遇到了一個問題。伺服器端無法訪問在用戶端給審減率文字框中的值,最後我想是由於.伺服器對於唯讀文字框在指令碼中的值在伺服器端是沒有儲存到伺服器端的ViewState裡面的。用this來訪問是不行的。這是asp.net內部的設計。(另外我還測試了當文字框不是唯讀屬性的話在伺服器端就能得到值)於是我用Request.Form[control.ClientID]這樣來訪問果然能夠得到在用戶端給文字框賦予的值。
出乎意料中的是:測試人員測試對於這個問題測試出了一個bug:當這個頁面發送到伺服器端後,那個審減率的文字框被清空了。啊。怎麼回事呢?原來是提交後伺服器端能夠訪問到該值後並沒有儲存到Text屬性中去。當產生會發後那就自然的沒有了。
這個問題鬱悶了半天。那怎麼解決了。通過不懈的努力終於找到了一種解決方案:可能不是最好的,但至少可以實現:
為了讓伺服器端會發後能夠把值儲存下來,於是我把文字框中的readonly屬性取消了。現在關鍵的問題是不能讓使用者在文字框中輸入,那就通過指令碼來控制:
<asp:TextBox ID="TextBox1" runat="server" contenteditable="false" ></asp:TextBox>
上面的設定屬性主要是:contentedittable屬性設定為false後,使用者就不能在文字框中輸入任何值了。而且和readonly設定的文字框樣式完全一樣。
好了。問題終於解決了。希望能給和我遇到相同問題和類似問題的朋友們一點提示。當然也希望朋友們能夠提出其他解決方案。請高手賜教。