直到最近,以下代码一直按预期工作:
<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
并且它没有改变。insidetxtBox_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
在按钮中。因此,在编辑期间不会绑定转发器。