2012-05-16 49 views
3

請考慮以下事項:添加到客戶端上的文本框中的文本值在回發時添加到視圖狀態(因此當頁面重新加載時,該值仍然存在於文本框中)。在回發之前是否有viewstate事件?

當我通過jQuery將listBox1中的值移動到listbox2時,listbox2中的項不會添加到viewstate中。 (注意:在POST之前選擇了項目,並且通過request.form.getvalues(「listbox2」).getvalue(index).tostring()可以在服務器上使用listbox2中的值。

我不是尋找工作,我明白了。我想知道「爲什麼」不會添加listbox2值。有沒有爲文本框觸發一些事件,但不是列表框?只是想更好地瞭解發生了什麼。謝謝!

回答

3

添加到客戶端上的文本框的文本值在回發時添加到視圖狀態(因此當頁面重新加載時,該值仍然存在於文本框中)。

此聲明不正確。 TextBox服務器控件的值在回發期間保留,因爲瀏覽器將其發送到發佈數據中,並在回發時將TextBox的值從發佈數據複製到其Text屬性。查看狀態不涉及,因爲您可以通過設置EnableViewState="False"進行驗證。 (我這裏假設TextBox是可見和啓用;否則,瀏覽器在後的數據發送它的價值,並且視圖狀態需要保存價值。)

當我通過jQuery將listbox1中的值移動到listbox2時,如何將listBox2中的項目添加到viewstate中。

對於多選ListBox服務器控件,瀏覽器發送發佈數據中每個選定項目的值。回發時,ListBox查看發佈數據中的每個值,在其Items集合中搜索相應的項目,並將該項目的Selected屬性設置爲True。它不會將無法識別的值添加到Items集合中;相反,如果啓用了事件驗證,則會拋出「無效回發或回調參數」異常。同樣,視圖狀態不涉及。

+0

爲什麼項目添加到客戶端上的列表框2(通過jquery)不可用在服務器上的Items集合中? – mtntrailrunner

+1

ListBox控件不是由ASP.NET團隊設計的,用於自動將動態創建的項目添加到Items項目集合中。 (正如我在上一段中指出的那樣,它會拋出一個異常,因爲它假定惡意用戶試圖篡改發佈數據。)您可以創建自己的'ListBox'控件,但是您只需要每個項目的*值*,因爲瀏覽器不發送選項文本。 –

相關問題