0

このゲージを contentplaceholder で使用しています。

http://www.dariancabot.com/projects/jgauge_wip/

MyControl.ascx:

<link rel="stylesheet" href="Scripts/jgauge.css" type="text/css" />
<script type="text/javascript" src="Scripts/jquery-1.8.0.js"></script>
<script language="javascript" type="text/javascript" src="Scripts/jgauge-0.3.0.a3.js"></script>
<script language="javascript" type="text/javascript" src="Scripts/jQueryRotate.2.2.js"></script>
<script language="javascript" type="text/javascript" src="Scripts/excanvas.min.js"></script>

<div id="<%=this.ClientID%>_ctl" class="jgauge" ></div>

<script type="text/javascript">
    $(document).ready(function () {
    var isPostBack = <%= Page.IsPostBack ? "true" : "false" %>;
        if(isPostBack == "true")
        {
            Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler);
            prm.add_endRequest(onEndRequest);
        }
        else{
                var <%=this.ClientID%>_ctl;

                <%=this.ClientID%>_ctl = new jGauge(); 
                <%=this.ClientID%>_ctl.id = '<%=this.ClientID%>_ctl';
                <%=this.ClientID%>_ctl.init(); 
 }
    });

    function EndRequestHandler(sender, args){  
        var <%=this.ClientID%>_ctl;
        <%=this.ClientID%>_ctl = new jGauge(); 
        <%=this.ClientID%>_ctl.id = '<%=this.ClientID%>_ctl';
        <%=this.ClientID%>_ctl.init();
}
</script>

MyPage.aspx: (複数のコントロールを持つ動的に作成されたテーブルが含まれています。生成されたテーブルをプレースホルダーに置きます)

<asp:UpdatePanel ID="up1" runat="server">
    <ContentTemplate>
        <asp:PlaceHolder id="phMain" runat="server" />
    </ContentTemplate>
    <Triggers>
        <asp:AsyncPostBackTrigger ControlID="myBtn" />
    </Triggers>
</asp:UpdatePanel>
<asp:Button ID="myBtn" runat="server" Text="Refresh" /> 

マスターページにスクリプトマネージャーがあります:

<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePartialRendering="true"></asp:ScriptManager>

しかし、非同期ポストバック (「myBtn」を押す) の後、ゲージは消えます。助けてください。数日以来、それを解決しようとしています。

4

1 に答える 1

2

私はこれを解決することができました:

$(document).ready(function () { 
    Sys.WebForms.PageRequestManager.getInstance()
        .add_endRequest(<%=this.ClientID%>_ctlEndRequestHandler); 
    var <%=this.ClientID%>_ctl; 

    <%=this.ClientID%>_ctl = new jGauge();  
    <%=this.ClientID%>_ctl.id = '<%=this.ClientID%>_ctl'; 
    <%=this.ClientID%>_ctl.init();
});

function <%=this.ClientID%>_ctlEndRequestHandler(sender, args){
    var <%=this.ClientID%>_ctl; 
    <%=this.ClientID%>_ctl = new jGauge();  
    <%=this.ClientID%>_ctl.id = '<%=this.ClientID%>_ctl'; 
    <%=this.ClientID%>_ctl.init(); 
}

唯一の違いは、ポストバック チェックが行われないことです。根本的な問題は、$(document).ready部分的なポストバックで発生しないことです。つまり、isPostBack実際に true に設定されることはありません。このため、Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler);は決して実行されませんでした。つまり、決して実行されませEndRequestHandlerんでした。

編集

もう 1 つの問題は、メソッドに名前を付けるEndRequestHandlerと、同時に複数のコントロールがある場合に問題が発生することが保証されていることです。これを回避するため<%=this.ClientID%>_ctlに、の名前に追加して、EndRequestHandler一意であることを確認しました。

より詳しい情報:

jQuery $(document).ready と ASP.NET UpdatePanel を一緒に使用するにはどうすればよいですか?

http://encosia.com/document-ready-and-pageload-are-not-the-same/

于 2012-10-23T06:37:51.850 に答える