当TextBox在Repeater中时,TextBox.Text在编辑后不会更改

时间:2014-03-18 09:43:07

标签: c# asp.net postback postdata

以下代码直到最近才按预期工作:

<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按钮。因此,在编辑期间不会限制转发器。

1 个答案:

答案 0 :(得分:0)

在这种特殊情况下,RepeaterFormView控件没有任何问题。显然我有一个JavaScript函数,它将Repeater创建的所有文本输入控件重置为默认值。此重置JS函数在对话框关闭事件上执行。此外,我曾经关闭了包含相关编辑表单的对话框以及提交按钮单击。因此,我无法在LoadPostData中看到更新的值,因为它们不存在。