在Page_Load之前更新数据

时间:2011-08-30 14:31:40

标签: .net asp.net

我有一个包含控件的页面。该控件在页面上重复多次,显示数据库中的不同数据。最终结果类似于数据表,我可以扩展div以在某种控制面板中显示更多数据。每个“行”都有一个按钮,该按钮从该特定行的输入中获取值,并使用它们更新数据库。

我面临的问题是,在表单提交时,页面的Page_Load发生在控件的更新方法触发之前(Page_Load>提交>再次Page_Load> fire update方法),因为控件需要是又装了。虽然该方法按预期工作(因为输入值保持在页面加载之间),页面内容显示原始输入值,我希望它显示从数据库中获取的更新值(我想如果可能的话,避免将其更改为单独的计算。)

e.g。一个输入包含支付金额,比如500.如果我输入200,该方法将存储200作为支付并且数据库将更新以显示剩余300,但之后的页面加载仍将显示500,因为提取数据的方法在更新方法之前调用。

如何确保在页面再次加载之前触发特定行的更新方法?

4 个答案:

答案 0 :(得分:2)

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

之类的东西

在页面加载方法中,将数据提取逻辑包装在

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

答案 1 :(得分:0)

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

另一个选项是,如果页面尚未回发,则仅设置控件的值。如果您没有在回发时再次设置值,则ViewState中存储的任何内容都应填充到字段中。

答案 2 :(得分: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
    }
}

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

答案 3 :(得分:0)

感谢您的所有建议。在与同事协商后,我决定使用Jquery AJAX方法和Webmethods来动态地提交和更新界面。