我有一个包含控件的页面。该控件在页面上重复多次,显示数据库中的不同数据。最终结果类似于数据表,我可以扩展div以在某种控制面板中显示更多数据。每个“行”都有一个按钮,该按钮从该特定行的输入中获取值,并使用它们更新数据库。
我面临的问题是,在表单提交时,页面的Page_Load发生在控件的更新方法触发之前(Page_Load>提交>再次Page_Load> fire update方法),因为控件需要是又装了。虽然该方法按预期工作(因为输入值保持在页面加载之间),页面内容显示原始输入值,我希望它显示从数据库中获取的更新值(我想如果可能的话,避免将其更改为单独的计算。)
e.g。一个输入包含支付金额,比如500.如果我输入200,该方法将存储200作为支付并且数据库将更新以显示剩余300,但之后的页面加载仍将显示500,因为提取数据的方法在更新方法之前调用。
如何确保在页面再次加载之前触发特定行的更新方法?
答案 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来动态地提交和更新界面。