c# - Asp.net 控件在回发后不更新

标签 c# asp.net textbox updates

我正在编写代码以从 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。我对此没有任何问题,也不认为存在问题,但此时我要质疑物理定律。

最佳答案

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

当您在评估回发处理程序之前进行回发时,将引发 PageLoad 事件

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

Asp.net 页面生命周期 enter image description here
(来源:microsoft.com)

关于c# - Asp.net 控件在回发后不更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19430516/

相关文章:

winforms - Windows 窗体 : textbox with history

c# - List<t> 可以被多个线程访问吗?

C# Word Interop Automation 2013 - 将字体颜色设置为 RGB 值

C# UDP 广播客户端/服务器不工作

c# - 使用资源键的绑定(bind)字段中的标题文本

php - 在字段纯 PHP 退出时验证输入字段

c# - 如何在 asp.net c# 上制作一个真正的 XLS 文件?

c# - asp中继器按钮文本更改

c# - 从内容页访问 MasterPage 上 UserControl 的属性

c# - 清除特定文本框 ASPX 页面