在Page_Load之前更新数据

问题描述:

我有一个包含控件的页面。该控件在页面上重复多次,显示来自数据库的不同数据。最终的结果类似于一张数据表,我可以扩展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

感谢您的所有建议。在咨询了我的同事之后,我决定使用Jquery AJAX方法和Webmethods来动态提交和更新接口。

听起来就像你需要检查在将数据绑定到页面之前是否发生了回发。像

在页面加载方法

,包装你的数据读取逻辑

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

这听起来像你只需要在更新后再次重新绘制您的控件。我会把生成控件的逻辑放在它自己的方法中,然后在Page_Load上更新后调用该方法。

另一种选择是只设置控件的值,如果页面尚未返回。如果您在回发时不再设置这些值,则存储在ViewState中的任何内容都应该填充到这些字段中。

如果您创建的用户控件动态,那么你需要重新创建它们每个帖子后面,但你不希望加载每个帖子上回的数据,所以做如下

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 
    } 
} 

当我点击按钮时,它将返回到服务器并再次创建动态控制并将文本从视图状态绑定。