0

我在我的内容占位符中使用了这个量规。

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从未运行过。

编辑

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 回答