2011-08-30 60 views
1

我有一個包含控件的頁面。該控件在頁面上重複多次,顯示來自數據庫的不同數據。最終的結果類似於一張數據表,我可以擴展div以在一種控制面板中顯示更多數據。每個'行'都有一個按鈕,它從該特定行的輸入中獲取值,並用它們更新數據庫。在Page_Load之前更新數據

我現在面臨的問題是,在表單提交頁面的Page_Load控制火災的更新方法之前發生(的Page_Load>提交>的Page_Load再次>消防更新方法),因爲該控件需要重新加載。雖然該方法按預期工作(因爲輸入值在頁面加載之間保持),但頁面內容顯示原始輸入值,因爲我希望它顯示從數據庫中獲取的更新值(我希望如果可能,避免將其作爲單獨計算進行更改)。

例如一個輸入包含支付的金額,例如500.如果我輸入200,則該方法將存儲200作爲支付,並且數據庫將被更新以顯示剩餘的300,但之後的頁面加載仍將顯示500,因爲拉取數據的方法在更新方法之前調用。

如何確保特定行的更新方法在頁面再次加載之前觸發?

+0

更新如何處理? –

+0

該方法位於控件本身的代碼隱藏中。 – MHTri

+0

我現在沒有時間檢查,但在頁面生命週期中可以看到在頁面/控件生命週期中生成的事件序列的相當好的解釋。請參閱http://msdn.microsoft.com/en-us/library/ms178472.aspx – Enes

回答

0

感謝您的所有建議。在諮詢了我的同事之後,我決定使用Jquery AJAX方法和Webmethods來動態提交和更新接口。

2

聽起來就像你需要檢查在將數據綁定到頁面之前是否發生了回發。像

在頁面加載方法

,包裝你的數據讀取邏輯

if(!Page.IsPostback) 
{  
    // fetch data 
} 
0

這聽起來像你只需要在更新後再次重新繪製您的控件。我會把生成控件的邏輯放在它自己的方法中,然後在Page_Load上更新後調用該方法。

另一種選擇是隻設置控件的值,如果頁面尚未返回。如果您在回發時不再設置這些值,則存儲在ViewState中的任何內容都應該填充到這些字段中。

0

如果您創建的用戶控件動態,那麼你需要重新創建它們每個帖子後面,但你不希望加載每個帖子上回的數據,所以做如下

ASPX:我有面板我需要添加用戶控件動態

<asp:Panel ID="Panel1" runat="server"> 
    </asp:Panel> 
    <asp:Button ID="Button1" runat="server" Text="Button" /> 

在頁面加載:

protected void Page_Load(object sender, EventArgs e) 
{ 
    //create your control on every time 
    TextBox TextBox1 = new TextBox(); 
    TextBox1.ID = "TextBox1"; 
    Panel1.Controls.Add(TextBox1); 

    if (Page.IsPostBack) 
    { 
     TextBox1.Text = "bind on fist time"; 
     // bind data here.. 
     // only the fist time 
    } 
} 

當我點擊按鈕時,它將返回到服務器並再次創建動態控制並將文本從視圖狀態綁定。

相關問題