2009-10-31 19 views
1

我想要使用jQuery.load()方法加載mschart,我的aspx頁面(SalesOverview.aspx), 我正在加載另一個接受參數並呈現圖表的aspx頁面(ChartHandler.aspx)。 但是當試圖執行時,圖表有時不會被渲染。相反,我可以在頁面中看到圖像保持器的一種東西(類似於我們將無效圖像url作爲圖像標籤src屬性值引用時所看到的)。Ms圖表:有時使用div.Load,方法來渲染圖表時,有時不加載區域圖表

我使用的代碼是如下

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="SalesOverview.aspx.cs" Inherits="OmnexCRM_UI.SalesOverview" %> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

<html xmlns="http://www.w3.org/1999/xhtml" > 
<head></head> 
<body> 
    <form id="frmPag1" runat="server"> 
    <div id="divGraph"> </div> 

</form> 
</body> 

$(文件)。就緒(函數() { VAR的startDate = 「10/10/2009」 VAR結束日期=「12/11/2009" VAR高度= 「150」; VAR寬度= 「730」;

var strUrl = "ChartHandler.aspx?chartMode=salesOverview&startDate=" + startDate + "&endDate=" + endDate + "&height=" + height + "&width=" + width; 

$("#divGraph").html("<div class='divLoadingProdReport'><img src='images/ajax-loader-gray.gif' alt='Loading...'/></div>").fadeIn(10, function() { 

    jQuery.ajax({ 
     url: strUrl, 
     type: "POST", 
     processData: false, 
     contentType: "text/xml", 
     data: null, 
     success: function(data) { 

     $("#divGraph").fadeOut(200, function() { 
       $(this).html(data).fadeIn(100); 

      }); 

     } 
    }); //ajax 
}); 

});

在ChartHandler.aspx

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

<html xmlns="http://www.w3.org/1999/xhtml" > 
<head runat="server"> 
<title></title> 
</head> 
<body> 
<form id="form1" runat="server"> 
<div> 
<asp:Panel ID="pnlSalesChart" CssClass="pnlSalesChart" Visible="false" runat="server">  
</asp:Panel> 
</div> 
</form> 

在ChartHandler.aspx.cs,在頁面加載,我讀查詢字符串值,並且建立一個區域圖和並稱到面板。

回答

2

幾件事情:

  1. 你呈現一整頁阿賈克斯,你應該只呈現你的面板
  2. 你正在做一個POST到您的ChartHandler頁面,這應該是一個GET
  3. 你正在請求text/xml,但你沒有用xml做任何事情
  4. 你正在請求一個網頁。只需使用一個通用處理器(ASHX)對於這樣的東西

示例代碼

HTML頁面

<form id="form1" runat="server"> 
<div> 
    <p>Test page</p> 
    <div id="renderPanel"> 
    </div> 
</div> 
</form> 

<script type="text/javascript"> 
    $(document).ready(function() { 
     $.get("chart.ashx?propertyA=1&propertyB=2", function(data, textStatus) { 
      $("#renderPanel").html(data); 
     }); 
    }); 
</script> 

創建一個通用的處理程序(ASHX)與名稱'Chart.ashx'

public class ChartHandler : IHttpHandler { 

public void ProcessRequest (HttpContext context) { 
    //process querystring, which is in 'context.Request.QueryString' 

    context.Response.ContentType = "text/html"; 

    PlaceHolder wrapperPanel = new PlaceHolder(); 
    //add your chart here 
    wrapperPanel.Controls.Add(
     new Image() { ImageUrl = "http://www.geenstijl.nl/archives/images/niekijkenw.png" }); 

    //render control to HTML 
    StringBuilder stringBuilder = new StringBuilder(); 
    StringWriter stringWriter = new StringWriter(stringBuilder); 
    HtmlTextWriter htmlWriter = new HtmlTextWriter(stringWriter); 

    wrapperPanel.RenderControl(htmlWriter); 

    context.Response.Write(wrapperPanel); 
} 

public bool IsReusable { 
    get { 
     return false; 
    } 
} 
} 

添加在web.config中httpHandlers下:

<add verb="*" path="~/Chart.ashx" validate="false" type="ChartHandler"/>