以下代码直到最近才按预期工作:
<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>
我注意到,在按下txtBox.Text
进行编辑后,我的submitButton
属性未在代码中更新。 noBindTxtBox.Text
也不会更新。由于我不是唯一一个正在开发应用程序的人,我相信它可能是应用程序中某些其他更改的副作用。如果提取到测试应用程序中,上述示例工作正常。
目前我没有想法如何确定导致此类行为的确切问题。这似乎是一个生命周期问题。
由于我不是asp.net的专家,你可能会抛弃一些可以帮我识别问题的调试/追踪想法吗?
顺便在FormView1_OnItemUpdating
方法中,我在txtBox.Text
点击时提取submitButton
值并且不会更改。同样在txtBox_OnUnload
方法内。单击提交按钮后,甚至不会调用txtBox_OnTextChanged
。
更新2014-03-18
我将RadTextBox
子类化,以检查发布的数据是否包含已编辑的值。
public class RRadTextBox : RadTextBox {
protected override bool LoadPostData(string postDataKey, System.Collections.Specialized.NameValueCollection postCollection){
return base.LoadPostData (postDataKey, postCollection);
}
}
事实证明它不包含更新的文本框值。也就是说,即使在更改文本框值之后,postCollection[postDataKey]
值也与最初设置的值相同。有人知道LoadPostData
在哪种情况下不包含更新的值只是初始值?
更新2014-03-19
在表单视图RRadTextBox
中直接添加EditItemTemplate
后,我可以在Text
方法中看到更新的LoadPostData
属性值。
<EditItemTemplate>
<serverControls:RRadTextBox runat="server" ID="directRRadTxtBox" Text="initial Text"/>
我想补充一点,FormView
不是PageLoad
事件,而是OnClick
按钮。因此,在编辑期间不会限制转发器。
答案 0 :(得分:0)
在这种特殊情况下,Repeater
和FormView
控件没有任何问题。显然我有一个JavaScript函数,它将Repeater
创建的所有文本输入控件重置为默认值。此重置JS函数在对话框关闭事件上执行。此外,我曾经关闭了包含相关编辑表单的对话框以及提交按钮单击。因此,我无法在LoadPostData
中看到更新的值,因为它们不存在。