0

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

<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.TextsubmitButton并且它没有改变。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在按钮中。因此,在编辑期间不会绑定转发器。

4

1 回答 1

0

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

于 2014-03-20T13:24:10.163 回答