2011-10-03 19 views
5
var r = { 
     init : function(){ 
      r = Raphael("pie"); 
      //r.g.txtattr.font = "12px 'Fontin Sans', Fontin-Sans, sans-serif"; 
      r.g.text(320, -330, "Message Status").attr({ "font-size": 20 }); 

      var pie = r.g.piechart(360, -180, 100, <%= Session["uStats"] %>, { legend: [<%= Session["vkeyColor"] %>], colors: [<%= Session["vPieColor"] %>] }); 
      pie.hover(function() { 
       this.sector.stop(); 
       this.sector.scale(1.1, 1.1, this.cx, this.cy); 
       if (this.label) { 
        this.label[0].stop(); 
        this.label[0].scale(1.5); 
        this.label[1].attr({ "font-weight": 800 }); 
       } 
      }, function() { 
       this.sector.animate({ scale: [1, 1, this.cx, this.cy] }, 500, "bounce"); 
       if (this.label) { 
        this.label[0].animate({ scale: 1 }, 500, "bounce"); 
        this.label[1].attr({ "font-weight": 400 }); 
       } 
      }); 
      var r = Raphael("pie"), 

        data2 = [<%= Session["vProgressPercentage"] %>]; 
        axisx = ["10%", "20%"]; 
      r.g.txtattr.font = "12px 'Fontin Sans', Fontin-Sans, sans-serif"; 
      r.g.barchart(80, 25, 100, 320, data2, { stacked: true, colors: [<%= Session["vProgressColor"] %>,'#fff'] }); 
      axis2 = r.g.axis(94, 325, 280, 0, 100, 10, 1); 
     } 
     } 
      window.onload = function() { 
      r.init(); 
     }; 

El Javascript se ejecuta cuando la página se carga, hago una devolución de datos parcial usando un panel de actualización, el javascript no se ejecuta durante la devolución de cómo llamarlo desde el servidor.Llamar javascript desde el servidor en postback

<asp:ScriptManager ID="smCharts" runat="server" /> 
    <script type="text/javascript" language="javascript"> 
      Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(BeginRequestHandler); 
      Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler); 
      function BeginRequestHandler(sender, args) { 
       r.init(); 
      } 
      function EndRequestHandler(sender, args) { 
       r.init(); 
      } 

      </script> 
     <asp:UpdatePanel runat="server" ID="Holder" OnLoad="messsagePercentStats" UpdateMode="Conditional"> 
      <ContentTemplate> 

       <div id="pie" onclick="__doPostBack('Holder', '');" style="top: -125px; left: -20px; width: 610px; position: relative; 
        height: 389px;"> 
       </div> 

Esto es lo que estoy intentando y el gráfico no ha cambiado. se mantiene constante como en la carga de la página

protected void Timer_Tick(object sender, EventArgs args) 
    { 
     String MsgID = HttpContext.Current.Request.QueryString["MsgID"]; 
     int msgID = Convert.ToInt32(MsgID); 
     BindGridViewUsers(msgID); 

     ClientScript.RegisterStartupScript(this.GetType(), "loadpie", "r.init();"); 
     Holder.Update(); 
     } 

Respuesta

5

Utilice ScriptManager.RegisterStartupScript para llamar a una función de JavaScript desde un panel de actualización; algo como esto:

ScriptManager.RegisterStartupScript(this,this.GetType(),"key","javscriptfunction();" , false); 
0

window.onload no funciona después de que la página ya se ha cargado. Utilice

$(function(){ r.init();})

lugar.

2

se puede poner este script dentro de una función:

function foo() { 
    ... 
} 

que se ejecutará sobre la carga DOM:

window.onload = function() { 
    foo(); 
}; 

y sobre devolución de datos del lado del servidor de un UpdatePanel:

ScriptManager.RegisterStartupScript(this, this.GetType(), "foo", "foo();", true); 
+0

He actualizado el código, ¿me puede decir dónde estoy yendo mal? – Mark

0

También puede hacer

Response.Write("<script language='javascript'>alert('I'm an alert');</script>"); 

Sólo hay que poner el código en lugar del alert. Es posible que pueda llamar a la función desde allí, pero no lo he probado.

Cuestiones relacionadas