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