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)を使用するだけです

サンプルコード

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>

'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 に答える