2011-06-11 24 views
4

我正在根據所選下拉動態生成表單。 表單由字段組成(十進制值的數據條目+少量文本字段)。必須在最後添加所有小數值,並使用該值更新總文本框。總文本框被禁用。已禁用文本框損失viewstate

當用戶輸入值後,在窗體上單擊「保存」按鈕時,除禁用的文本框之外,整個窗體將保留在視圖狀態中。當我啓用文本框時,一切正常。請注意,我動態生成表單並使用javascript來更新總文本框的值來計算(添加所有小數域)。

P.S.我正在爲保持視圖狀態而做一切正確的事情。

那麼是什麼啓用/禁用得到了軸承上的視圖狀態

回答

7

基本上,我添加了兩條語句來使其工作。

txtBox.Attributes.Add("readonly", "readonly"); 
txtBox.Style.Add("color","gray"); 

當我用txtBox.Enabled =假,也沒有堅持視圖狀態,但使用或者在上面我的代碼隱藏頁兩種說法做了

+1

關於我發佈一段時間的問題上多一點問題:http://stackoverflow.com/questions/1060518/strange-behavior-using-html-readonly-readonly-vs-javascript-element-readonl/1063609# 1063609 – 2011-06-11 17:38:41

+0

@DotNetInfo,但是如果「txtBox」控件不能被intellisense訪問,那麼它會深入到DetailsView或GridView中。不幸的是FindControl(「txtBox」)總是在page_load中返回null。 – Fandango68 2015-06-02 02:29:41

0

添加JavaScript的網頁上:

function enableTextBoxes() { 
      $("input[type='text'][disabled='disabled']").removeAttr("disabled"); 
     } 

,並加入到服務器代碼(在Page_Load中,在PreRender或一些其他方法)

ClientScript.RegisterOnSubmitStatement(typeof(Page), "enableTextBoxes", "enableTextBoxes();"); 

如果你使用的UpdatePanel然後利用ScriptManager.RegisterOnSubmitStatement方法

+0

我已經嘗試過,但它沒有工作。基本上,文本框顯示爲禁用狀態,但該值不會在回發時設置。文本框不顯示任何值。我用(「只讀」,「只讀」)屬性,它工作正常,但不顯示文本框處於禁用狀態(灰色) – DotNetInfo 2011-06-11 14:27:17

+0

@DotNetInfo你必須刪除硬編碼Enabled =「false」或ReadOnly =「true 「從文本框控件開始。 – Fandango68 2015-06-02 02:28:13

2

是的,禁用的表單元素將不會發送它的價值到服務器端,你可以看看請求頭。禁用元素不會出現在「get」或「post」集合中。

如果你想設置用戶不能編輯它,你可以將它設置爲只讀。