0

我有一个由菜单控件 (MenuItemClick) 触发的 UpdatePanel。在UpdatePanel 中有一个带有XML 数据源的Repeater。单击菜单项后,Repeater 的 XML 数据源的 XPath 将被更新,Repeater 将显示更新的数据。

问题是,UpdatePanel 只更新/刷新一次。第二次单击(在菜单项上)仍会触发回发并且数据正确返回(从 Firebug 中看到),但 UpdatePanel 不显示传回的数据。

<asp:Menu runat="server" Orientation="Horizontal" RenderingMode="List" 
    EnableTheming="False" ID="MenuBar" MaximumDynamicDisplayLevels="0"
    StaticDisplayLevels="1" DataSourceID="xdsSiteMap" 
    onmenuitemclick="TabBar_MenuItemClick">
    <DataBindings>
        <asp:MenuItemBinding DataMember="siteMapNode" TextField="title" ValueField="value" />
    </DataBindings>
</asp:Menu>
<asp:XmlDataSource ID="xdsSiteMap" runat="server" 
    DataFile="SiteMap.xml" XPath="SiteMap/siteMapNode">
</asp:XmlDataSource>

<asp:UpdatePanel runat="server" ID="upp">
<Triggers>
    <asp:AsyncPostBackTrigger ControlID="MenuBar" />
</Triggers>
<ContentTemplate>
    <asp:XmlDataSource ID="xdsData" runat="server" 
        DataFile="LinkData.xml" XPath="Links[@value='step1']"></asp:XmlDataSource>
    <asp:Repeater runat="server" ID="repeater" dataSourceID="xdsData">
    <ItemTemplate>
       <a href="<%#XPath("@url") %>"><%#XPath("Desc") %></a>
    </ItemTemplate>
    </asp:Repeater>
</ContentTemplate>
</asp:UpdatePanel>

代码隐藏:

    protected void TabBar_MenuItemClick(object sender, MenuEventArgs e)
    {
        xdsData.XPath = "Links[@value='" + e.Item.Value + "']";
    }
4

2 回答 2

0

您从中执行单击事件的 asp:menu 不包含在更新面板中,不确定这是否是直接问题,但这让我想知道此时回发是否完全异步发生。尝试将 asp:menu 包含在更新面板中,看看会发生什么。

于 2012-03-20T06:24:57.590 回答
0

事实证明这是一个 JavaScript 错误,每个页面加载都有一个观察者函数:

        var prm = Sys.WebForms.PageRequestManager.getInstance();
        prm.add_pageLoaded(function (sender, args) {
            // some exception is generated here
        });
于 2012-03-20T06:48:30.850 回答