Ms charts: График области иногда не загружается при использовании метода визуализации диаграммы div.Load - PullRequest
1 голос
/ 31 октября 2009

Я пытаюсь загрузить 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>

$ (Документ) .ready (функция () { 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
});

});

In 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 При загрузке страницы я читаю значения строки запроса и строю диаграмму области и добавляю ее на панель.

1 Ответ

2 голосов
/ 04 ноября 2009

Пара вещей:

  1. Вы рендерите целую страницу в ajax, вам просто нужно отобразить вашу панель
  2. Вы делаете POST на своей странице ChartHandler, это должно быть GET
  3. Вы запрашиваете текст / 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"/>

...