在我的UserControl中,我试图更新中继器中的updatepanel,如下所示:

HTML标记

<asp:UpdatePanel ID="updDocumentQuickView" runat="server" UpdateMode="Conditional">
  <ContentTemplate>
    <asp:Repeater ID="repFolders" runat="server" OnItemDataBound="repFolders_OnItemDataBound" OnItemCommand="repFolders_OnItemCommand">
        <ItemTemplate>

            <asp:LinkButton ID="lnkFolder" runat="server"></asp:LinkButton>

            <asp:UpdatePanel ID="updFiles" runat="server" UpdateMode="Conditional">
                <ContentTemplate>
                    <asp:Repeater ID="repFiles" runat="server" OnItemDataBound="repFiles_OnItemDataBound">
                        <ItemTemplate>
                            <%# Container.DataItem %>
                        </ItemTemplate>
                    </asp:Repeater>
                </ContentTemplate>
            </asp:UpdatePanel>
        </ItemTemplate>
    </asp:Repeater>
  </ContentTemplate>
</asp:UpdatePanel>


C#代码

protected void repFolders_OnItemCommand(object sender, CommandEventArgs e)
{
    int intRow = -1;

    ScriptManager myScriptManager = (ScriptManager)Page.Master.FindControl("myScriptManager");

    Match myMatch = Regex.Match(myScriptManager.AsyncPostBackSourceElementID, "repFolders.ctl([0-9]*).lnkFolder");

    if (myMatch != null)
        intRow = Convert.ToInt32(myMatch.Groups[1].Value);

    if (intRow > -1)
    {
        RepeaterItem myItem = repFolders.Items[intRow];

        Repeater repFiles = (Repeater)myItem.FindControl("repFiles");
        UpdatePanel updFiles = (UpdatePanel)myItem.FindControl("updFiles");

        string[] arr1 = new string[] {
                                    "array item 1",
                                    "array item 2",
                                    "array item 3",
                                    "array item 4",
                                    "array item 5" };

        repFiles.DataSource = arr1;
        repFiles.DataBind();

        updFiles.Update();
    }
}


我得到的最终结果是updDocumentQuickView是要更新的UpdatePanel,而不是updFiles。如果我在lnkFolder周围包装了一个UpdatePanel,则该UpdatePanel将使用相同的C#代码进行更新。我已经检查了用提琴手发送回什么样的数据,并发送了错误的UpdatePanel。我得到正确的RepeaterItem,并且找到了repFiles和updFiles。我错过了什么才能获得正确的UpdatePanel来进行更新?

更新

Hawxby解决方案通过updDocumentQuickView的更新解决了该问题,非常感谢。但是即时通讯仍然对updFiles不发送任何内容有问题。通过将文字放入updFiles并进行工作的进一步测试告诉我,repFiles中有某些内容未返回。 repFiles确实有限制的数据。

最终解决方案

在repFolders_OnItemDataBound中将repFiles.Visible设置为false,也就怪它没有显示。

最佳答案

可能是因为您必须显式设置异步绑定

<asp:UpdatePanel ID="updDocumentQuickView" ChildrenAsTriggers="false">
    <Triggers>
        <asp:AsyncPostBackTrigger ControlID="repFolders" EventName="repFolders_OnItemCommand" />
    </Triggers>

</asp:UpdatePanel>

关于c# - 中继器中的UpdatePanel,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5458585/

10-13 09:11