Asp.net控件在postback后未更新

4
我正在编写代码,从asp控件中读取数据以更新数据库记录。我已经调试了一天,将它追溯到我应该在之前注意到的问题。
该代码首先使用来自数据库的现有值填充控件。当我点击“保存”时,它应该读取控件的当前值并使用这些值进行保存。不幸的是,它实际上使用的是控件在更改之前的值。它没有看到控件的变化。
以下是一个示例:
<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。我没有遇到任何问题,也不认为问题出在这里,但现在我已经开始怀疑物理定律了。
1个回答

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

当您在处理回发事件之前进行回发时,会引发PageLoad事件。因此,如果您不避免重新绑定控件,则它们将使用来自数据库的值进行加载。然后,回发事件将将它们保存到数据库中。
Asp.net页面生命周期 enter image description here
(来源: microsoft.com)

我刚和我的任务负责人交谈了...她建议了同样的事情。我会立即查看。 - elbillaf
好了,我已经在检查回传了,但是我将这段代码放在之前……这就是问题所在……通过你的图表,我看到了我的第二个想法是正确的——也就是说,我漏掉了一些基本的东西。谢谢,tff。 - elbillaf

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接