无法将值从C传递到amcharts JavaScript函数

无法将值从C传递到amcharts JavaScript函数,javascript,c#,amcharts,gauge,Javascript,C#,Amcharts,Gauge,我在amCharts的帮助下创建了一个图表,显示了他们网站上示例中的温度。图表显示正确 现在我用C从数据库中获取温度,我试图将该值传递给硬编码温度的函数,所以我得到动态值。然而,我刚刚得到图表,指针仍然在0,没有显示温度 到目前为止,我已经尝试了三种方法: 我使用了一个隐藏字段,在C中为隐藏字段赋值,并调用显示图表的JavaScript函数。它只显示图表。针不会变。 我使用了脚本管理器和Web API,我不知道Web API,只是在Internet上使用了代码,这是相同的结果,但是c中的函数不断

我在amCharts的帮助下创建了一个图表,显示了他们网站上示例中的温度。图表显示正确

现在我用C从数据库中获取温度,我试图将该值传递给硬编码温度的函数,所以我得到动态值。然而,我刚刚得到图表,指针仍然在0,没有显示温度

到目前为止,我已经尝试了三种方法:

我使用了一个隐藏字段,在C中为隐藏字段赋值,并调用显示图表的JavaScript函数。它只显示图表。针不会变。 我使用了脚本管理器和Web API,我不知道Web API,只是在Internet上使用了代码,这是相同的结果,但是c中的函数不断被调用

我将整个amCharts代码放在一个JavaScript函数中。我在c中得到值,然后使用

String script = "window.onload = function() { UpdateTemp('" + dt.Rows[0][0].ToString()+ "'); };";
ClientScript.RegisterStartupScript(this.GetType(), "UpdateTemp", script, true);
这再次显示了相同的结果,地图显示指针保持在0

这是我的第三种方法代码:

ASPX页面,JavaScript函数


质量代码应该修改,但我设法使其生效。 我做了两个改变:

1:我用了PageLoad而不是BindGrid的方法,你真的需要这个吗? 2:我直接将原始温度值作为一个参数填充,因为它在我这边是一个浮点数,你用简单的引号将datarow值插入,javascript将其解释为字符串,而hand的showValue方法似乎无法容忍它。 代码:

结果:

改进代码的一些想法:

将您的连接字符串放在配置文件中,不要放在代码中! 如果使用using do matter调用资源的方法close,它会自动调用。在使用它的背后,它实际上是一个最终的尝试捕捉,结束在最终被称为无论如何; 如果可能,将数据访问与呈现页面分开,创建一个单独的类来管理它,这将提高代码的可读性和演化性。 如果没有使用变量temp1,只需将其删除即可。 当您获取数据时,无论数据的来源是什么,可能是Web服务或数据库,或者其他,在访问它并记录它之前,请始终检查它是否为null,这样做不会花费太多,并且可以避免异常升级。 我们在2019年,您可以使用直接获取对象作为查询结果,而不是通用数据行。如果感兴趣,请访问网站。他们有很多有趣的教程。 韩国,
Ali

如果将此作为方法UpdateTemp:console.logtemp的第一条指令添加;点击F12打开浏览器ex:Chrome的开发工具,你在控制台中看到了什么?嗨,艾莉丝,这是我在控制台中看到的东西它在哪里?是否忘记更新帖子或将结果粘贴到评论中?ScriptResource.axd?d=D9drwtSJ4hBA6O未捕获Sys.ParameterCountException:Sys.ParameterCountException:函数的参数计数不匹配。错误$create[作为create]我脑海中浮现的基本问题是,你确定你的餐桌温度已经满了吗?我看到您直接访问datarow而不检查结果是否为null,这是很危险的。我认为在访问之前,这种检查总是检查结果是否为null是不好的建议。您应该知道对于您的数据有哪些可能的响应。如果可能为null,请处理它。如果不可能,就让事情尽快失败吧。这样你就能马上看到问题,并解决问题。我不同意,如果你的网站是活的,你试图访问一个不应该为空的变量,而它是空的,会发生什么?是否向最终用户显示堆栈错误等关键信息?我认为正确的方法是在本地管理它,用有意义的信息记录异常数据,可能通过字符串记录更多的上下文,并抛出一个特定的异常,允许您使用适当的操作显示弹出窗口、重定向、重定向日志等。。。最重要的是,尽快了解问题,以便能够快速修复。如果生产网站出现故障,正确的做法是记录异常并向最终用户显示500。如果你想的话,你可以做一个相当不错的500页。但你让例外冒泡了。试图进行空检查以防隐藏太多问题,并很快使代码几乎无法维护这是一个有趣的主题,我发现关于这个问题的主题肯定还有更多:似乎这个问题没有统一的答案,我仍然建议这样做。它多次为我节省了很多时间…谢谢你,它现在正在工作。我将对你提到的质量进行更改。
<script>
 function UpdateTemp(temp) {

     am4core.ready(function() {

            // Themes begin
            am4core.useTheme(am4themes_animated);
            // Themes end

            // create chart
            var chart = am4core.create("chartdiv", am4charts.GaugeChart);
            chart.hiddenState.properties.opacity = 0; // this makes initial fade in effect

            chart.innerRadius = -25;

            var axis = chart.xAxes.push(new am4charts.ValueAxis());
            axis.min = 0;
            axis.max = 100;
            axis.strictMinMax = true;
            axis.renderer.grid.template.stroke = new am4core.InterfaceColorSet().getFor("background");
            axis.renderer.grid.template.strokeOpacity = 0.3;

            var colorSet = new am4core.ColorSet();

            var range0 = axis.axisRanges.create();
            range0.value = 0;
            range0.endValue = 50;
            range0.axisFill.fillOpacity = 1;
            range0.axisFill.fill = colorSet.getIndex(0);
            range0.axisFill.zIndex = - 1;

            var range1 = axis.axisRanges.create();
            range1.value = 50;
            range1.endValue = 80;
            range1.axisFill.fillOpacity = 1;
            range1.axisFill.fill = colorSet.getIndex(2);
            range1.axisFill.zIndex = -1;

            var range2 = axis.axisRanges.create();
            range2.value = 80;
            range2.endValue = 100;
            range2.axisFill.fillOpacity = 1;
            range2.axisFill.fill = colorSet.getIndex(4);
            range2.axisFill.zIndex = -1;

            var hand = chart.hands.push(new am4charts.ClockHand());

            // using chart.setTimeout method as the timeout will be disposed together with a chart

            chart.setTimeout(randomValue, 2000);

            function randomValue(temp) {
                hand.showValue(temp, 1000, am4core.ease.cubicOut);
                chart.setTimeout(randomValue, 2000);
            }



        }); // end am4core.ready()

    };
</script>
public void BindGrid(String charttype)
{

    string constring = "Data Source=********.DOMAIN.ORG01;Initial Catalog=Temperature;Integrated Security=SSPI;";
    using (SqlConnection con = new SqlConnection(constring))
    {
        using (SqlCommand cmd = new SqlCommand("SELECT Temperature,HighestPoint,LowestPoint FROM Temperature", con))
        {
            cmd.CommandType = CommandType.Text;
            con.Open();
            DataTable dt = new DataTable();
            dt.Load(cmd.ExecuteReader());
            temp1.Value = dt.Rows[0][0].ToString();
            con.Close();
            String script = "window.onload = function() { UpdateTemp('" + dt.Rows[0][0].ToString()+ "'); };";
             ClientScript.RegisterStartupScript(this.GetType(), "UpdateTemp", script, true);

        }
    }
}