C# 使用ascx控件时重复的javascript代码

C# 使用ascx控件时重复的javascript代码,c#,web,charts,fusioncharts,C#,Web,Charts,Fusioncharts,我有一个FusionCharts库,我想用它在C#web应用程序中绘制图表。 创建图表(在单独文件夹中找到一些开销文件后)的代码是: 现在我试着在用户控件中包含这段代码。但我希望可以选择向它传递一些参数,比如我希望它使用的“Data.xml”以及高度和宽度。 我现在正在使用它,但我当前的问题是当我在页面中包含多个控件实例时,因为如果我检查我的项目页面的“查看源代码”,它会添加两个组件,但javascript如下所示: <script type="text/javascript" s

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


现在我试着在用户控件中包含这段代码。但我希望可以选择向它传递一些参数,比如我希望它使用的“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会被复制,正如预期的那样,只呈现一个图表。
最好的办法是什么?或者基本上包括我可以为每个控件操作的页面加载中动态生成的JavaScript?

如果希望每页只包含一次FusionCharts.js脚本,请在
OnPreRender
中的
RegisterClientScriptInclude
中注册它:

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>


感谢OnPreRender提示,我将尝试一下。在其他项目上,是的,myChartId、400、300、Data.xml和chartContainer需要以可控的方式更改,比如:例如,如果我在我的aspx页面中包含两个用户控件,我希望每个代码看起来像
var myChart1=new FusionCharts(“Charts/Spline.swf”、“myChartId”、“400”、“300”、“0”);myChart1.setXMLUrl(“Data1.xml”);myChart1.渲染(“chartContainer1”)
var myChart2=新的FusionCharts(“Charts/Spline.swf”、“myChartId2”、“400”、“300”、“0”);myChart2.setXMLUrl(“Data2.xml”);myChart2.渲染(“chartContainer2”)
如果用户控件为可能更改的值声明公共属性,则可以使用
语法将它们插入脚本中。
<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>