2009-06-15 94 views
4

当我分配AssociatedUpdatePanelId时,选择状态时不显示进度,但当我将其留空时,它会显示进度。为什么设置AssociatedUpdatePanelId时不会触发更新进度?

下面是ASPX标记:

<div> 
    <asp:ListBox ID="lstStates" runat="server" AutoPostBack="True" 
    OnSelectedIndexChanged="lstStates_SelectedIndexChanged" SelectionMode="Multiple"> 
    </asp:ListBox> 
</div> 
<div> 
    <asp:UpdatePanel ID="UpdatePanel1" runat="server"> 
    <ContentTemplate> 
    <asp:Panel ID="pnlCounty" runat="server"> 
    <asp:ListBox ID="lstCounties" runat="server" SelectionMode="Multiple"> 
    </asp:ListBox> 
    </asp:Panel> 
    </ContentTemplate> 
    <Triggers> 
    <asp:AsyncPostBackTrigger ControlID="lstStates" EventName="SelectedIndexChanged" /> 
    </Triggers> 
    </asp:UpdatePanel> 
    <asp:UpdateProgress ID="UpdateProgress2" runat="server" DisplayAfter="1" 
         AssociatedUpdatePanelID="UpdatePanel1"> 
    <ProgressTemplate> 
    <img src="../images/loader2.gif" /> 
    Loading Counties... 
    </ProgressTemplate> 
    </asp:UpdateProgress> 
</div> 

回答

10

this article,对于一个UpdatePanel外部触发器不火关联的UpdateProgress,因为使UpdateProgress控件执行搜索呼叫控制控件层次结构;外部触发器将不会出现在控制层次结构中。

但是,文章建议注入一些JavaScript来弥补这个错误;我已修改它(希望)以适应您的需求:

<script type="text/JavaScript" language="JavaScript"> 
    function pageLoad() 
    {  
     var manager = Sys.WebForms.PageRequestManager.getInstance(); 
     manager.add_endRequest(endRequest); 
     manager.add_beginRequest(OnBeginRequest); 
    } 
    function OnBeginRequest(sender, args) 
    { 
     var postBackElement = args.get_postBackElement(); 
     if (postBackElement.id == 'lstStates') 
     { 
    $get('UpdateProgress2').style.display = "block"; 
     } 
    } 
</script> 
相关问题