改寫考慮以下.aspx
頁:用戶文本框中輸入默認值
Title:
<asp:TextBox runat="server" ID="TitleTB"></asp:TextBox>
Details:
<asp:TextBox runat="server" ID="DetailsTB"></asp:TextBox>
<asp:Button runat="server" ID="Btn" Text="Submit" OnClick="Btn_click"/>
注意,我最小的代碼是合法所以很多線路的缺失(無關的線條,<br/>
爲例)。我在C#文件中通常會將詳細信息發佈到數據庫(插入它們),但如果我在查詢字符串(to_edit
,本身)中有某個字段,我需要更新已經存在的記錄。
很明顯,這個任務很簡單。問題是,當包含該字段時,我最初(在Page_Load
事件中)將Title
和Details
字段設置爲已在記錄中找到的值(因此用戶不必從零輸入,他會有他已經輸入的編輯)。
調試將表明,雖然,當我發佈這些回數據庫(UPDATE
查詢,這看起來有點像這樣UPDATE Table SET Title = @Title, Details = @Details WHERE [email protected]
,在那裏我檢查@ID
- 這是完全有效@Title
對應TitleTB.Text
和@Details
到DetailsTB.Text
,兩者都加上了SqlCommand.AddWithValue()
)由於某種原因,DetailsTB.Text
和TitleTB.Text
與我在Page_Load
中指定的相同,儘管我在瀏覽器中刪除了整個文本框內容並用不同的字符串重新填充。我的代碼背後的下面是選擇
部分:
//A part of my Page_Load()
//reader is an SqlDataReader, the connection is valid, the values here are valid, and the output is as planned.
TitleTB.Text = (string)reader["Title"];
DetailsTB.Text = (string)reader["Details"];
而且到現在爲止,一切似乎都很好。
//Relevant parts of Btn_click()
cmd.Connection = conn; //valid connection
cmd.CommandText = "UPDATE QuestionsTable SET Title = @Title, Details = @Details WHERE [email protected]";
cmd.CommandType = CommandType.Text;
cmd.Parameters.AddWithValue("@Title", TitleTB.Text);
cmd.Parameters.AddWithValue("@Details", DetailsTB.Text);
cmd.Parameters.AddWithValue("@ID", Request.QueryString["to_edit"]);
conn.Open();
int affected = cmd.ExecuteNonQuery(); //affected is now 1, as expected.
conn.Close();
//There's a redirection over here.
但在代碼如上圖所示,TitleTB.Text
和DetailsTB.Text
是相同的,它不是更新查詢中不起作用。就是因爲某些原因,即使我在瀏覽器上明確改變它們,文本框的值也不會改變。
任何想法會發生什麼?
編輯:
一個要點是,當我使用OnClientClick
事件提醒值(然後返回true,這只是一個測試) - 該值是相同的,以我所輸入的(不給默認值)。
你有沒有在你的'Page_Load'事件處理'PostBack'? –
您可以從數據庫表中檢查哪個值正在更新?默認的一個還是您正在輸入的? –
@ChandanRoy我沒有處理'回發'。數據庫表更新爲默認值(與未更新的相同),但會更新。 – Zack