需要帮助页面生命周期(我认为这让我很紧张)

时间:2010-03-22 21:27:57

标签: c# asp.net page-lifecycle

我已将一个空的asp.net表拖到我的webform上。我生成代码后面的所有行。

现在我的桌子已经填满并且有下拉列表。当用户点击保存时,我会遍历所有行并更新数据库中的下拉列表中的值。

这一切都很棒。但是,如果2列各有“Present”,则不应再显示这2列,并使用其他下拉列表将2列添加到其位置。

这一切都有效。但是,您必须刷新整个页面才能找到应该消失的2列。

所以我尝试做的是在按钮点击事件结束时。清除整个表格然后重新生成它。但是,当我这样做时,我的值不再出于任何原因保存到数据库中。

if (IsPostBack == false)
{
    // check if dummy variables exist in db- If true just generate tables with values in db. If not generate them. 

}
else
{
   // grab the values from the database
   // generate tables with the values
}

btn click event
{
   go through all rows in table(foreach loop)
   update each column in the database with cells in each row. while in foreach loop.
   //done
}

所以这就是它的工作方式,并且它可以预期(保存所有正确的值)表格不会更新给用户。

不起作用

    if (IsPostBack == false)
    {
        // same code as above
    }

   // if postback is true do nothing. By the time it gets to the click event it says there is zero rows in the table so nothing happens.
    btn click event
    {
       // same code
    }

也失败了。

if (IsPostBack == false)
{
   // same code as above
}
else
{
   // same code as above but moved into its own method.
   gernerateTable();
}

btn click event
{
   // update all rows
   // once done clear the Tables rows
   // call generateTable()
}

最后一个没有做任何事,因为它没有更新任何东西。我不明白为什么。

那么我在这个生命周期中做错了什么在我的过程中出错了。当我希望立即更新表时,代码才能正常工作。

3 个答案:

答案 0 :(得分:1)

在构建页面时,ASP.NET会在创建控件时生成控件ID。这些ID呈现给HTML并由浏览器提交回服务器。在回发期间,ASP.NET重新生成页面上的控件以确定ID,然后从请求数据中为控件分配数据值。

因此,如果您动态生成控件(带有下拉列表的表行),则需要在检查,保存或修改它们之前生成所有这些行。我过去使用的常见模式是这样的:

OnPageLoad() {
  get data;
  build controls;
  bind data; 
}

OnButtonClick() {
  save data();
  build controls; // if changed by 'remove' or 'add'
  bind data;
}

答案 1 :(得分:0)

如果您向页面动态添加控件,则需要先重建它们,然后才能对它们执行任何操作。

我通常采取的措施是完全绕过这些类型的问题,即使用转发器。然后,您可以在RepeaterItems上执行foreach循环。它很干净,而且相对简单。没有页面生命周期问题。

答案 2 :(得分:0)

尝试将动态控件的创建移至Page Init事件。