ASP.NET:UpdatePanel仅更新一次

ASP.NET:UpdatePanel仅更新一次,asp.net,menu,updatepanel,repeater,xmldatasource,Asp.net,Menu,Updatepanel,Repeater,Xmldatasource,我有一个由菜单控件(MenuItemClick)触发的UpdatePanel。在UpdatePanel中,有一个带有XML数据源的中继器。单击菜单项后,Repeater的XML数据源的XPath将被更新,Repeater将显示更新的数据 问题是,UpdatePanel只更新/刷新一次。第二次向前单击(在菜单项上)仍将触发回发,并且正确返回数据(从Firebug中可以看到),但UpdatePanel没有显示回发的数据 <asp:Menu runat="server" Orientation=

我有一个由菜单控件(MenuItemClick)触发的UpdatePanel。在UpdatePanel中,有一个带有XML数据源的中继器。单击菜单项后,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>

更新面板中不包含执行click事件的asp:菜单,不确定这是否是直接的问题,但这让我怀疑回发是否在异步进行。尝试将asp:菜单封闭在更新面板中,看看会发生什么。

结果是JavaScript错误,每个页面加载都有一个观察者函数:

        var prm = Sys.WebForms.PageRequestManager.getInstance();
        prm.add_pageLoaded(function (sender, args) {
            // some exception is generated here
        });

这就是
的目的。正如我所说,回发肯定正在发生,updatePanel正在更新,但只是在第一次单击时才更新。这听起来像是一个事件连接问题。您是否在document ready函数中添加了任何内容?是的,这是一个JavaScript错误,直到我在其中添加了一些内容后才出现(请参阅我发布的答案)。谢谢你调查这件事!
        var prm = Sys.WebForms.PageRequestManager.getInstance();
        prm.add_pageLoaded(function (sender, args) {
            // some exception is generated here
        });