直到最近,以下代码还能正常工作:
<asp:FormView runat="server" ID="FormView1" OnDataBound="FormView_OnDataBound" DefaultMode="Edit"
OnItemUpdating="FormView1_OnItemUpdating"
DataSourceID="FormViewDsObjectDS">
<EditItemTemplate>
<asp:Repeater runat="server" ID="RepeaterOfRepeaters" OnItemDataBound="RepeaterOfRepeaters_OnItemDataBound">
<ItemTemplate>
<asp:Repeater runat="server" ID="TextBoxRepeater" OnItemDataBound="TextBoxRepeater_OnItemDataBound">
<ItemTemplate>
<asp:Label runat="server" ID="textLabel" Text='<%# Bind ("LabelText") %>'></asp:Label>
<telerik:RadTextBox runat="server" ID="txtBox" Text='<%# Bind ("Value") %>' OnTextChanged="txtBox_OnTextChanged" OnUnload="txtBox_OnUnload"></telerik:RadTextBox>
<telerik:RadTextBox runat="server" ID="noBindTxtBox" Text="initial value" />
</ItemTemplate>
</asp:Repeater>
</ItemTemplate>
</asp:Repeater>
<telerik:RadButton runat="server" ID="submitButton" CommandName="Update" Text="Update"></telerik:RadButton>
</EditItemTemplate>
</asp:FormView>
我注意到,当submitButton
被按下时,我的txtBox.Text
属性在编辑后的代码中没有更新。noBindTxtBox.Text
也没有更新。因为我不是唯一一个开发应用程序的人,所以我相信这可能是应用程序中其他一些更改的副作用。如果将上述示例提取到测试应用程序中,则可以正常工作。
目前我不知道如何指出导致这种行为的确切问题。这似乎是一个生命周期问题。
因为我不是asp.net专家,也许你可以抛出一些调试/跟踪的想法,这将有助于我确定一个问题?
通过FormView1_OnItemUpdating
方法,我在submitButton
点击时提取txtBox.Text
的值,它没有改变。txtBox_OnUnload
方法内部也是如此。点击提交按钮后,txtBox_OnTextChanged
甚至没有被调用。
我子类化RadTextBox
,以检查发布回来的数据是否包含编辑值。
public class RRadTextBox : RadTextBox {
protected override bool LoadPostData(string postDataKey, System.Collections.Specialized.NameValueCollection postCollection){
return base.LoadPostData (postDataKey, postCollection);
}
}
结果是它不包含更新的文本框值。即修改文本框的值后,postCollection[postDataKey]
的值与初始设置的值保持一致。有人知道在什么情况下LoadPostData
不包含更新值只是初始值吗?
当RRadTextBox
直接添加到表单视图EditItemTemplate
时,我可以在LoadPostData
方法中看到更新的Text
属性值。
<EditItemTemplate>
<serverControls:RRadTextBox runat="server" ID="directRRadTxtBox" Text="initial Text"/>
我想补充的是,FormView
不是绑定在PageLoad
事件,而是一个按钮的OnClick
。因此,在编辑期间不会绑定中继器。
在这种特殊情况下,Repeater
和FormView
控件没有任何问题。显然,我有一个JavaScript函数,它将Repeater
创建的所有文本输入控件重置为默认值。这个重置JS函数在对话框关闭事件上执行。此外,我过去常常关闭包含有问题的编辑表单的对话框,并单击提交按钮。因此,我无法在LoadPostData
中看到更新的值,因为它们不在那里。