我禁用了控件(標籤,按鈕等)的視圖狀態和用於測試目的的頁面。在頁面和控件上禁用視圖狀態不起作用
現在,當我更改客戶端上的標籤文本並攔截按鈕的單擊事件時,標籤仍顯示服務器先前發送的文本。
那麼是怎麼回事?我需要能夠更改客戶端上的數據並將其提供給服務器。
這是如何完成的?
我禁用了控件(標籤,按鈕等)的視圖狀態和用於測試目的的頁面。在頁面和控件上禁用視圖狀態不起作用
現在,當我更改客戶端上的標籤文本並攔截按鈕的單擊事件時,標籤仍顯示服務器先前發送的文本。
那麼是怎麼回事?我需要能夠更改客戶端上的數據並將其提供給服務器。
這是如何完成的?
標籤在客戶端呈現爲spans
;因此,您將無法捕獲服務器端的更改,因爲它們不是輸入元素。
ASP.NET爲您提供了以編程方式更改標籤文本的錯覺,因爲它使用ViewState在每次回發中存儲/檢索此信息。通過禁用它,你放棄使用這個「功能」。
你需要做的是添加一個hidden input。
在表單中添加:
<asp:HiddenField runat="server" id="hiddenHolder" />
然後在當您更改標籤的文字點擊事件的客戶端,也改變了hiddenHolder
的value
。然後
在你後面的代碼可以得到價值:
string LabelText = hiddenHolder.Value;
這樣您在客戶端上的變化是提供給服務器
這聽起來像你不張貼回服務器,或者您發回服務器,但不會更改任何內容。服務器如何處理回發?禁用視圖狀態在這裏並不重要,文本是服務器發送的內容,因爲它是該控件的文本,並且看起來好像你已經在服務器上更改了它,僅僅是客戶端。 – 2013-03-18 20:38:59
我在設置斷點的按鈕的Click事件中處理回發。是的只是想在客戶端改變它,並且通過放棄viewstate我想禁用服務器參與的數據持久性。當我禁用viewstate時,我不應該在服務器或客戶端上更改數據。它呢? – spiral 2013-03-18 20:47:09
你想完成什麼?您不想保留更改後的文本,但您確實希望將更改的文本提供給服務器? – 2013-03-18 20:52:00