文本框.当文本框在重复器内时,文本不会在编辑后改变

本文关键字:文本 改变 编辑 | 更新日期: 2023-09-27 17:50:41

直到最近,以下代码还能正常工作:

<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甚至没有被调用。

更新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时,我可以在LoadPostData方法中看到更新的Text属性值。

<EditItemTemplate>
        <serverControls:RRadTextBox runat="server" ID="directRRadTxtBox" Text="initial Text"/>

我想补充的是,FormView不是绑定在PageLoad事件,而是一个按钮的OnClick。因此,在编辑期间不会绑定中继器。

文本框.当文本框在重复器内时,文本不会在编辑后改变

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