簡體   English   中英

向位置x的動態ASP.NET表控件中添加新行-回發后Viewstate的問題

[英]Adding a new row to a dynamic ASP.NET Table Control, at position x - Problems with Viewstate after postback

我正在使用ASP.NET/C#創建動態表控件,並且該表用於保存表單。 我需要允許用戶單擊一行中的按鈕,然后在原始行的正下方復制該行。 我的頁面也使用AJAX和jQuery。

我嘗試使用Table.Rows.AddAt(indexoforigrow + 1,newrow),但出現錯誤,表明索引超出了值的范圍。 我想也許我沒有正確地獲得原始行的索引,所以我只是扔了一個1仍然出現錯誤。

我還注意到,當我按下按鈕執行代碼時,表格消失了。 關於如何解決該問題的任何想法?

我在想,如果無法解決這些問題,則必須遍歷該表並將數據提交到臨時表,並在指示的位置添加新行。 然后,我將拉回所有數據並再次顯示。

編輯

當我無法正常工作時,我繼續前進,嘗試設置提交功能以遍歷數據並將其提交給數據庫,並意識到單擊提交按鈕時與單擊添加行按鈕時遇到相同的問題。 看來我的問題確實與viewstates / postback有關。

我對此進行了一些閱讀,從中可以看出解決方案是每次都在頁面加載時重新創建動態控件。 但是,如果我不知道我擁有多少行/單元格,以及如何將用戶輸入的信息保存在表格中,我會感到困惑。 我無法將信息保存到數據庫或其他任何東西,因為單擊提交后,所有信息都會消失。

您是否考慮過使用其他控件? 網格控件之一可能會更好地滿足您的目的。

我已經通過使用GridView的頁腳(其他方式)來處理與您所描述的情況類似的情況(聽起來)。 最大的技巧是將顯示對象(表,GridView等)綁定到對象列表。 然后,您可以操作對象列表,在列表更改后重新綁定顯示對象。

您將需要以某種方式保留此列表,或者最終將列表重置為null。 一種方法是將其保存為會話的一部分。

無論如何,我們的想法是將顯示對象(GridView)綁定到對象列表。 當用戶單擊“添加”時,一個項目將添加到列表中。 保存列表,然后調用GridView.DataBind方法。

您每次進入頁面時重新創建動態表的方向都正確。 我有類似的東西,我的解決方案是將客戶端狀態保留在頁面上的隱藏字段中。 每次在客戶端上的表中添加一行時,增加一個計數器或調整隱藏字段中的狀態數據。 然后,在服務器上,當頁面回發時,請從該隱藏字段中讀取信息,以了解在客戶端上添加了多少行。 您將必須對添加的新行(及其中的小部件)使用某種命名約定,以便可以在服務器上重新創建它們。

一個更簡單的選項可能是使用UpdatePanel。 而不是嘗試在客戶端上添加行,您的“添加行”按鈕將導致部分更新。 服務器端代碼會將新行添加到表中,並更新viewstate。

我結束了讓數據專家對他進行更多處理的工作,以便可以將ListView綁定到存儲過程。 解決了我的一些問題。

感謝您的有用評論。

差不多一年后才回到這個話題,因為我在當前的項目中也遇到了類似的問題。 第一次我做錯了幾件事。 首先,確實確實需要在每次加載時重新創建控件,但是我還必須在頁面周期的早期創建它們。 我試圖在頁面加載期間(即在加載viewstate之后)創建它們。

在加載viewstate之前,需要使用相同的ID重新創建控件。 我去了頁面初始化,它工作正常。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM