4

我正在编写代码以从 asp 控件中读取数据以更新数据库中的记录。最后一天我一直在调试,我已经将它追溯到我以前应该注意到的东西。

代码首先使用数据库中的现有值填充控件。当我单击SAVE时,它应该从控件中读取当前值并与它们一起保存。不幸的是,它实际上是在对控件进行更改之前使用控件的值。它没有看到控件的变化。

这是一个示例:

<asp:TextBox ID="OtherCourseName_5" runat="server"></asp:TextBox>

下面是函数中对应的后面代码btnSave_onClick()

int object_number=5;

string other_course_name_string
    = "OtherCourseName_" + object_number.ToString().Trim();

TextBox ocn = utilities
   .utils
   .FindControlRecursive(this.Master, other_course_name_string) as TextBox;

我正在使用FindControlRecursive()我在网上某处找到的。我敢肯定,它可以工作,但以防万一,我尝试将控件直接寻址为OtherCourseName_5.Text. 即使我只是在 中显示值OtherCourseName_5.Text,它也会给出原始值。

我使用同一页面输入新数据和编辑数据。当我输入数据时它工作正常。也就是说,它正确地看到TextBox控件已从空变为有数据。只有当我在页面上调用编辑功能时(通过传递edit=true)。我通过将开关添加edit=true为查询字符串以这种方式调用它(程序正确读取该开关,到达适当的代码区域,打印出所有内容的所有正确值 - 除了控件的内容!)。

该页面过于复杂,无法发布整个内容。我试图传达基本的细节。我完全有可能犯了一个简单的编码错误,但我似乎更有可能从根本上误解了页面的处理方式。

是否有任何已知的东西可以使控件的值看起来好像没有更改?

注1:我想也许我在输入数据后必须去另一个领域,但我试过了,它仍然是一个问题。

注意 2:我同时使用TextBoxDropDownList控件,并且两者都有相同的问题。

注 3:这些控件位于面板上,页面使用SiteMaster. 我对此没有任何问题,也不认为问题存在,但我现在要质疑物理定律。

4

1 回答 1

8
protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        //populate controls with data from database
    }
}

在评估回发处理程序之前执行回发时,会引发 PageLoad 事件

因此,如果您不避免重新绑定控件,它们将使用数据库中的值加载。然后回发事件会将它们保存到 db

Asp.net 页面生命周期 (来源:microsoft.com在此处输入图像描述

于 2013-10-17T15:16:51.903 回答