我有一些32個文本框和1個「保存」按鈕。我想要的是隻保存其文本已更改的文本框的文本。我怎樣才能做到這一點?我如何知道文本框已更改的文本?文本框中的文本更改
回答
您可以在客戶端檢測到此按鍵,或比較後的值併發送更改的項目列表。 但是,如果你想在服務器端做到這一點,你將不得不加載您的服務器數據,並手動將其與每個文本框進行比較。
使用會話變量來存儲每個回發的數據並比較這些值。如果某個文本框的值發生變化,則保存,否則不保存。
會話變量不是序列友好的。然後您依賴會話,會話可能會在請求之間超時,您假設用戶正在以特定順序訪問頁面等。 – 2011-04-30 02:49:20
你可以使用HiddenFields。在頁面加載時,您可以使用原始TextBox值設置HiddenField。 在保存按鈕上,您可以將HiddenFields值與TextBox值進行比較,如果HiddenField值不是 與TextBox值匹配,則可以將該TextBox值保存在數據庫中否則不會。
如果您沒有使用.net 3.5或更高版本,這是實現它的最佳方式。否則,我建議以@ V4Vendetta提到的方式查看IPostBackDataHandler。 – 2012-05-16 10:42:00
就我個人而言,我會做服務器端。假設你有沒有涉及數據綁定,你可以不喜歡你的ASPX.CS代碼隱藏以下內容:
...
private string InitialValue1
{
get { return ViewState[@"IV1"] as string; }
set { ViewState[@"IV1"] = value; }
}
// Repeat for all 32 text boxes.
protected void Page_Load(object sender, EventArgs e)
{
if(!IsPostBack)
{
TextBox1.Text = InitialValue1 = loadText1FromDatabase();
// Repeat for all 32 text boxes.
}
}
protected void MySaveButton_Click(object sender, EventArgs e)
{
if (TextBox1.Text!=InitialValue1) saveText1ToDatabase(TextBox1.Text);
// Repeat for all 32 text boxes.
}
...
當然,在現實世界中的場景,我會做一些循環/陣列處理而不是編寫32個相同的函數/屬性。
只是我的偏好 - 我不會存儲在ViewState中。如果viewstate驗證關閉,則可以有意更改值,並且還會增加已經膨脹的viewstate的大小。我確實同意100% - 這應該是服務器端。 – 2011-04-30 02:47:13
使用cookie變量來存儲每個回發的數據並比較這些值。
我不會 - 你在問問題。如果cookies被清除了怎麼辦?如果cookie過期怎麼辦?如果這些值在之前的會話中保持不變,因爲該頁面被緩存且不匹配後?如果同一頁面的多個實例打開,該怎麼辦? – 2011-04-30 02:48:33
您使用的是哪個版本,如果是3.5及以上,我會要求您檢查IPostBackDataHandler。這應該可以幫助你實現你想要的。
在以前的版本,我認爲你將不得不做它只是通過與原文或至少你可以使用比較MERGE關鍵字 (你將不得不修改你的數據庫查詢),而你推你記錄到數據庫中。
我會建議在加載時使用jQuery函數來創建一個假的舊數據輸入。 事情是這樣的:
$(document).ready(function(){
$(":text").each(
var newid=$(this).attr("id") + "_old";
var oldvalue=$(this).val();
var formy=$("form");
formy.appendChild("<input type='hidden' name='" + newid +"' value='" + oldvalue +"'>);
})
這樣一來,如果更改號碼,該功能會自動爲您編寫正確的號碼。 然後在服務器端,您可以用類似下面比較值:
var inputs = Request.Form.Keys.Where(rs=>rs.Contains("_old"));
foreach (var input in inputs)
{
//check the _old vs the input without the old and do your thing
}
- 1. 文本框中的文本更改
- 2. 其他文本框文本更改時更改文本框的文本
- 3. 更改此文本框的文本更改時文本框的背景顏色?
- 4. 文本框更改
- 5. 更改文本框
- 6. C#.NET更改文本框的文本
- 7. 無法更改文本框的文本
- 8. 文本框文本更改事件
- 9. Android單擊更改文本框文本
- 10. 更改文本框的borderColor
- 11. 將文本更改爲文本框後更新純文本
- 12. 如何更改文本框中的文本取決於另一個文本框
- 13. 如果複選框被選中,則更改文本框文本
- 14. 更改文本框輸入
- 15. Jade:文本框更改值=「...」
- 16. 文本框值已更改
- 17. 更改文本框值
- 18. 文本框更改事件
- 19. 更改VBA中相同文本框中的文本字體
- 20. VB.Net中的文本串聯問題文本框中的文本更改事件
- 21. 在文本更改後用另一個文本框(子頁面)更改文本框文本(父頁面)
- 22. 改變多個文本框的值使用AJAX文本框中的值更改
- 23. 將文本框文本轉換爲日期文本更改
- 24. 更改文本框中的存儲值
- 25. 文本框中的鏈接更改
- 26. 更改文本框中的值問題
- 27. 在輸入文本的文本框更改邊框顏色
- 28. 從另一個框架(容器)更改文本框的文本
- 29. 更改html中文本框的文本大小
- 30. 在Powerpoint幻燈片的文本框中更改文本
這聽起來是一個巨大的工作量.. :(是值得的痛苦怎麼可能通過onkeypress事件的事件呢? ?如果onkeypress是真的,即使那麼我們必須檢查每個32個文本框??? – scooby 2011-04-29 05:58:37
個人而言,我只是在服務器端做到這一點 - 它更可靠,在上述情況下,你可以通過幾種方法做到這一點,我會加載一個文本框id和值的javascript數組,然後在發佈後找出哪些與數組不匹配,然後發送更改隱藏字段中的id。但是..我會在服務器上執行此操作。客戶端代碼總是可以繞過/修改。請不要按照上面的一些建議與cookie等。儘可能多因爲每個人的意見都被讚賞 - 餅乾和會話使得這個問題變得非常不清楚。只需在服務器端加載數據 – 2011-04-30 02:50:54
並與發佈的值進行比較。如果您使用自動映射器將頁面上的值映射到對象中並比較對象,則可以使用它更清晰。 – 2011-04-30 02:51:37