elb*_*laf 4 c# asp.net textbox updates
我正在编写代码来从asp控件读取数据以更新数据库中的记录.我已经在最后一天进行了调试,我已将其追溯到之前我应该注意到的事情.
代码首先使用数据库中的现有值填充控件.当我单击SAVE时,它应该从控件中读取当前值并保存.不幸的是,它实际上正在做的是在对它们进行更改之前使用控件的值.它没有看到控件的变化.
这是一个示例:
<asp:TextBox ID="OtherCourseName_5" runat="server"></asp:TextBox>
Run Code Online (Sandbox Code Playgroud)
这是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;
Run Code Online (Sandbox Code Playgroud)
我正在使用FindControlRecursive()我在网上找到的地方.它确实有用,但为了以防万一,我试图直接解决控制问题OtherCourseName_5.Text.即使我只是显示值OtherCourseName_5.Text,它也会给出原始值.
我使用同一页面输入新数据和编辑数据.输入数据时它工作正常.也就是说,它正确地看到TextBox控件已从空变为拥有数据.只有在我调用页面上的编辑功能时(通过传递edit=true).我通过将开关添加edit=true为查询字符串来调用它(程序正确读取该开关,到达相应的代码区域,打印出所有正确的值 - 除了控件的内容!).
该页面太复杂,无法发布整个内容.我试图传达必要的细节.完全有可能我做了一个简单的编码错误,但似乎更有可能我从根本上误解了页面的处理方式.
是否有任何已知的东西可以使控件的价值看起来好像没有改变?
注1:我想也许在输入数据后我不得不去另一个领域,但我试过了,这仍然是一个问题.
注意2:我正在使用两者TextBox和DropDownList控件,并且两者都有相同的问题.
注3:这些控件位于面板上,页面使用的是SiteMaster.我没有遇到任何问题,也不认为问题存在,但我现在要质疑物理定律.
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
//populate controls with data from database
}
}
Run Code Online (Sandbox Code Playgroud)
在评估回发处理程序之前执行回发时,将引发PageLoad事件
因此,如果您不避免重新绑定控件,则会加载数据库中的值.然后回发事件将它们保存到db
Asp.net Page Lifecycle http://i.msdn.microsoft.com/dd252940.fig01a(en-us).gif