【问题标题】:ASP.Net LifeCycle and Database Update orderASP.Net 生命周期和数据库更新顺序
【发布时间】:2011-12-08 15:40:25
【问题描述】:

我一直在阅读有关页面生命周期的信息。我了解 LifeCycle,但是不清楚该做什么以及何时做。问题是我使用 Page_Load 来获取数据库值,并设置表单字段。我使用按钮的 onClick 方法来更新数据库。但是,表单字段文本属性是在 Page_Load 期间设置的,因此它实际上只是使用 OLD 值更新数据库。

Page_Load:我收集数据,并设置控件文本属性以反映数据。 Button_onClick:我从表单更新数据库 问题:它正在更新从 Page_Load 收集的值,而不是实际的表单。

当然,我不应该在 Page_Load 中执行所有操作。那么在这个过程中我哪里出错了?

【问题讨论】:

  • 不要忘记在 Page_Load 中使用 !Page.IsPostback 以确保仅在您第一次访问页面时加载初始值。

标签: asp.net page-lifecycle


【解决方案1】:

Page_Load

如果您在 Page_Load 事件中加载数据库数据,首先要做的是将其包装在 if (!IsPostBack) 语句中。

IsPostBack
获取一个值,该值指示页面是否正在为 第一次或正在加载以响应回发。

http://msdn.microsoft.com/en-us/library/system.web.ui.page.ispostback.aspx

所以IsPostBack = true当页面循环是回发的结果。

在您的 Page_Load 中,您应该只在 IsPostBack = false 时收集您的数据,而不是在每次页面加载时。

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        // gather your data here
    }
}

设置字段

我个人更喜欢在 PreRender 事件处理程序上设置字段内容(但老实说,我不知道它应该/必须在那里完成,这对我来说似乎更合乎逻辑)。

PreRender 在您的回发事件(单击按钮、下拉选择更改...)之后执行,因此它可以确保您的更新和更普遍的数据修改在呈现页面之前完成。

【讨论】:

  • 错了。首先要评估是否需要页面加载事件,或者是否可以使用它。此外,在很多情况下,添加 !IsPostBack 会砖您的代码。
  • 好吧,我肯定不是专家。你能指点我一些文章/实际例子吗?
  • 老实说,我不明白您的评论与这两个链接之间的关系。第一个涉及使用专门使用回调机制的商业组件 (ASPxGrid)(因此应该使用 IsClassback 而不是 IsPostBack)。第二次提到 PageLoad 它如何与 HiddenField 一起工作,在加载时没有填充数据并通过 javascript 进行更改...从有人投票反对并说我错了,我期待更好的输入。
猜你喜欢
  • 1970-01-01
  • 2012-10-08
  • 2018-06-22
  • 1970-01-01
  • 1970-01-01
  • 2018-11-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多