Ms charts: диаграмма с областями иногда не загружается при использовании div.Load, метода визуализации диаграммы

Я пытаюсь загрузить mschart на свою страницу aspx (SalesOverview.aspx), используя метод jQuery.load(), я загружаю другую страницу 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 = "11/12/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 при загрузке страницы я читаю значения строки запроса, строю диаграмму с областями и добавляю ее на панель.


person Shyju    schedule 31.10.2009    source источник


Ответы (1)


Пара вещей:

  1. Вы визуализируете целую страницу в ajax, вы должны просто отображать свою панель
  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"/>

person Jan Jongboom    schedule 04.11.2009