2011-02-03 32 views
3

我已經偶然發現了這個問題,當我需要撤消html控件我已經添加客戶端使用JavaScript 回發(由於服務器端驗證 - 這不是可選的)。客戶端JavaScript ViewState更新在asp .net形式

請告訴我,如果我試圖達到這個目標的方式是cr * p,並且有更好的方法來做到這一點。

基本上,我正在做的是克隆一個文本框控件最多10次在頁面上時,用戶點擊「添加」並將輸入的值從每個這些texboxes隱藏字段中讀取代碼背後。然而,這種方式很好,當服務器端驗證在回發後沒有通過時,所有這些動態添加的(克隆)texboxes消失,因爲ViewState對它們一無所知。

我正在考慮2種可能的解決方案,這兩者似乎哈克

  • 在隱藏字段

  • 使用存儲的值重建上文件的onload所有克隆的文本框()包裹的形式在阿賈克斯更新面板,並將克隆的texboxes放在它外面,因此,在刷新時不刷新這部分屏幕

現在,是否有可能以某種方式「更新」ViewState使其知道所有使用客戶端腳本添加的html控件?任何更好的想法?我想用客戶端腳本實現這一點,因此不考慮在服務器端克隆文本框,對不起。

+0

我去了一個非常骯髒的方式添加10個隱藏的控件在頁面上。這種方式ViewState總是知道他們,我可以隱藏/取消隱藏他們通過JavaScript的客戶端。 – Tsar 2011-03-14 16:46:16

回答

5

您無法在客戶端修改ViewState。如果你這樣做,你將視圖狀態無效並在回發中收到錯誤。

對於您的情況,您可能需要考慮使用javascript和jQuery將文檔就緒事件上的文本框與存儲在隱藏字段中的值進行渲染。我建議看看jQuery模板,特別是如果你可以將數據存儲爲隱藏字段中的JSON(http://weblogs.asp.net/scottgu/archive/2010/10/04/jquery-templates-data -link和全球化接受的,作爲官方 - jQuery的plugins.aspx)。