1

我有一个 FusionCharts 库,我想用它在 C# Web 应用程序中绘制图表。创建图表的代码(在单独的文件夹中找到一些开销文件之后)是:

  <script type="text/javascript" src="Charts/FusionCharts.js">

  <script type="text/javascript"><!--         

  var myChart = new FusionCharts( "Charts/Spline.swf", 
  "myChartId", "400", "300", "0");
  myChart.setXMLUrl("Data.xml");
  myChart.render("chartContainer");

  // -->     
  </script>

现在我试图做的是将那段代码包含在用户控件中。但我希望可以选择向它传递一些参数,例如我希望它使用的“Data.xml”以及高度和宽度。我现在可以使用它,但是我当前的问题是当我在页面中包含多个控件实例时,因为如果我检查项目页面的“查看源代码”代码,它会添加两个组件,但 javascript 看起来像这样:

  <script type="text/javascript" src="Charts/FusionCharts.js">

  <script type="text/javascript"><!--         

  var myChart = new FusionCharts( "Charts/Spline.swf", 
  "myChartId", "400", "300", "0");
  myChart.setXMLUrl("Data.xml");
  myChart.render("chartContainer");

  // -->     
  </script>

  <script type="text/javascript" src="Charts/FusionCharts.js">

  <script type="text/javascript"><!--         

  var myChart = new FusionCharts( "Charts/Spline.swf", 
  "myChartId", "400", "300", "0");
  myChart.setXMLUrl("Data.xml");
  myChart.render("chartContainer");

  // -->     
  </script>

它复制了代码,因此我的变量 myChart 被复制了,并且正如预期的那样,只呈现了一个图表。解决这个问题的最佳方法是什么?或者基本上包括我可以为每个控件操作的 page_load 中动态生成的 JavaScript?

4

1 回答 1

3

如果您希望每页仅包含一次 FusionCharts.js 脚本,请RegisterClientScriptInclude在以下位置注册OnPreRender

protected override void OnPreRender(EventArgs e)
{
    base.OnPreRender(e);
    this.Page.ClientScript.RegisterClientScriptInclude(
        typeof(YourUserControl), "FusionCharts", "Charts/FusionCharts.js");
}

对于其他脚本块,请说明它应该如何工作。myChart唯一应该不同的是吗?"myChartId"和怎么样"chartContainer"

如果问题仅仅是myChart变量相互冲突,那么您可以将您的脚本包含在一个自动执行的匿名函数中:

<script type="text/javascript"><!--
(function() {
    var myChart = new FusionCharts( "Charts/Spline.swf", 
        "<%= this.ChartId %>", "400", "300", "0");
        myChart.setXMLUrl("<%= this.DataFile %>");
        myChart.render("<%= this.ChartContainerId %> ");
})();
// -->     
</script>
于 2013-02-22T18:21:01.903 回答