1

我正在尝试使用 jQuery.load() 方法在我的 aspx 页面(SalesOverview.aspx)中加载 mschart,我正在加载另一个接受参数并呈现图表的 aspx 页面(ChartHandler.aspx)。但是当尝试执行时,有时图表没有被渲染。相反,我可以在页面中看到一个图像持有者之类的东西(类似于我们将一个无效的图像 url 引用为图像标记 src 属性值时看到的)。

我正在使用的代码如下

<%@ 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>

$(document).ready(function() { var startDate ="10/10/2009" var endDate = "12/11/2009" var height = "150"; var width = "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 中,在页面加载中,我正在读取查询字符串值并构建面积图并将其添加到面板中。

4

1 回答 1

2

几件事:

  1. 您正在将整个页面渲染为 ajax,您应该只渲染您的面板
  2. 您正在对 ChartHandler 页面进行 POST,这应该是 GET
  3. 您正在请求 text/xml,但您没有对 xml 做任何事情
  4. 您正在请求一个网页。只需使用通用处理程序(ashx)来处理这样的事情

示例代码

网页

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

创建一个名为“Chart.ashx”的通用处理程序 (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"/>

于 2009-11-04T09:44:28.390 回答