2013-02-22 29 views
0

我有一个FusionCharts库,我想用它来在C#Web应用程序中绘制图表。 创建图表(定位在一个单独的文件夹中的一些开销文件后)的代码是:使用ascx控件时重复的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> 

现在我试图做的是包括用户控制范围之内的一段代码。但我希望能够选择传递一些参数,例如我希望使用的“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,我可以为每个控件操作?

回答

2

如果要包括FusionCharts.js脚本每页只有一次,然后用RegisterClientScriptIncludeOnPreRender注册它:

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> 
+0

感谢的OnPreRender提示,我想试试出。在其他项目中,是的,myChartId,400,300,Data.xml和chartContainer需要以受控方式进行更改,例如: – gorba 2013-02-22 20:00:03

+0

例如,如果我在aspx页面中包含两个用户控件,我希望每个代码看起来像 'var myChart1 = new FusionCharts(“Charts/Spline.swf”, “myChartId1”,“400”,“300”,“0”); myChart1.setXMLUrl(“Data1.xml”); myChart1.render(“chartContainer1”); ' 和 \t'var myChart2 = new FusionCharts(“Charts/Spline.swf”, “myChartId2”,“400”,“300”,“0”); myChart2.setXMLUrl(“Data2.xml”); myChart2.render(“chartContainer2”);' – gorba 2013-02-22 20:03:28

+0

如果您的用户控件为可更改的值声明公共属性,则可以使用'<%= ... %>'语法将它们插入到脚本中。 – 2013-02-22 20:37:36