2008-08-22 69 views
5

我在窗體(大約20)上有幾個「ASP:TextBox」控件。
當表單加載時,文本框從數據庫填充。
用戶可以更改填充值,當他們提交表單時,我將這些值發佈到服務器並有條件地保存(由某些業務邏輯確定)。
除文本框外,其餘所有文本框均按預期工作。表單發佈不包含文本框數據[ASP.NET C#]

在回發時,奇數框不包含用戶鍵入到框中的更新值。
調試應用程序時,顯然myTextBox.Text反映了舊的預填充值,而不是新的用戶提供的值。
其他每個框都正確顯示了它們各自的用戶提供的值。

我找到了解決方法。
我的解決方案是基本上從Request.Form對象中提取文本框的值:Request.Form[myTextBox.UniqueID],它包含用戶提供的值。

會發生什麼,在這裏?
正如我所提到的,其他文本框接收用戶提供的值就好了,這個特定的有問題的文本框沒有任何相關的邏輯 - 它只是取值並保存它。
這個文本框和其他文字框之間的主要區別在於這是一個多行框(用於輸入註釋),我相信它在ASP.NET中呈現爲HTML「textarea」標記而不是「input」標記。

回答

8

您最初是否正在加載數據!Page.IsPostBack?另外,文本框是否啓用了查看狀態?

1

記住頁面生命週期的順序,以及數據綁定表單的位置。

  • PreInit
  • 初始化
  • 負載
  • 您的控制事件處理程序

如果你正在讀的控制事件處理的值,但數據綁定在初始化或加載,你會具有舊的價值。

訣竅是始終在正確的事件中進行數據綁定,或者檢查回發並且不要綁定數據。

2

我會第二個Jonathan's response我會檢查你的數據綁定設置。

如果您不需要ViewState作爲文本框(即在表單提交之前不會發生回發),那麼您應該禁用它。

這聽起來像你沒有保存數據的問題(因爲你說你已經設法讓控制器讀取正確的數據)。因此,我會說在您的數據綁定代碼中加載問題。

6

這一直髮生在我身上。

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!Page.IsPostBack) 
    { 
     // populate text boxes from database 
    } 
} 
1

你最初加載數據,只有當!Page.IsPostBack?另外,文本框是否啓用了查看狀態?

我幾乎忘記檢查ViewState,但最終記住在SO上發表我的帖子之前,確認它沒有被禁用。我甚至設置了EnableViewState =「true」來確保。

我確實找到了解決方案,它與這裏的大部分答案都吻合。這個表格確實不止一次加載它的數據(這是故意的行爲)。我爲這個領域實現了一些特殊的代碼,一切都很好。

感謝您的回覆!