Javascript 使用参数从客户端调用后端函数以填充chart.js图形(vb.net、jQuery)

Javascript 使用参数从客户端调用后端函数以填充chart.js图形(vb.net、jQuery),javascript,jquery,asp.net,vb.net,charts,Javascript,Jquery,Asp.net,Vb.net,Charts,我正在尝试调用vb.net后端函数,以便填充chart.js条形图 我知道这是可能的,因为我使用此方法获取图表的标签 我的问题是,当我尝试调用另一个后端函数并将参数传递给它时,它会给我一个错误,告诉我: -->编译器错误消息:BC30451:未声明“statsType”。由于其保护级别,可能无法访问 我要做的是在下拉值更改时调用javascript函数,在下拉列表中获取新selectedItem的值,并使用该值作为参数调用后端函数,以获取填充图表的数据 这是我的密码: 客户端: <asp:

我正在尝试调用vb.net后端函数,以便填充chart.js条形图

我知道这是可能的,因为我使用此方法获取图表的标签

我的问题是,当我尝试调用另一个后端函数并将参数传递给它时,它会给我一个错误,告诉我:

-->编译器错误消息:BC30451:未声明“statsType”。由于其保护级别,可能无法访问

我要做的是在下拉值更改时调用javascript函数,在下拉列表中获取新selectedItem的值,并使用该值作为参数调用后端函数,以获取填充图表的数据

这是我的密码: 客户端:

<asp:DropDownList ID="ddlStatsType" ClientIDMode="Static" runat="server">
    <asp:ListItem Text="Participation rate" Value="1"></asp:ListItem>
    <asp:ListItem Text="Refusal rate" Value="2"></asp:ListItem>
    <asp:ListItem Text="No answer" Value="3"></asp:ListItem>
    <asp:ListItem Text="Declined" Value="4"></asp:ListItem>
    <asp:ListItem Text="Coming from somewhere else" Value="5"></asp:ListItem>
</asp:DropDownList>

<script type="text/javascript">
    $(document).ready(function () {
        initializeChart();
        $("[id*=ddlStatsType]").bind("change", function () {
            initializeChart();
        });
    });

    function initializeChart() {
        // Get context with jQuery - using jQuery's .get() method.
        var ctx = $("#myChart").get(0).getContext("2d");
        // This will get the first returned node in the jQuery collection.
        var myNewChart = new Chart(ctx);

        var statsType = $("#ddlStatsType").val();

        var data = {
            labels: <%= GetSitesListStringBuilder() %>,
            datasets: [
            {
                label: "My Second dataset",
                fillColor: "rgba(151,187,205,0.5)",
                strokeColor: "rgba(151,187,205,0.8)",
                highlightFill: "rgba(151,187,205,0.75)",
                highlightStroke: "rgba(151,187,205,1)",
                data: <%= UpdateStatsType(statsType) %>                }
        ]
        };

        myNewChart.Bar(data, {
            scaleShowVerticalLines: false
        });
    }
</script>

$(文档).ready(函数(){
initializeChart();
$(“[id*=ddlStatsType]”)。绑定(“更改”,函数(){
initializeChart();
});
});
函数initializeChart(){
//使用jQuery获取上下文-使用jQuery的.Get()方法。
var ctx=$(“#myChart”).get(0.getContext(“2d”);
//这将获得jQuery集合中返回的第一个节点。
var myNewChart=新图表(ctx);
var statstType=$(“#ddlstatstType”).val();
风险值数据={
标签:,
数据集:[
{
标签:“我的第二个数据集”,
填充颜色:“rgba(151187205,0.5)”,
strokeColor:“rgba(151187205,0.8)”,
高光填充:“rgba(151187205,0.75)”,
强光笔划:“rgba(151187205,1)”,
数据:}
]
};
myNewChart.Bar(数据、{
scaleShowVerticalline:错误
});
}
后端代码:

Public Function GetSitesListStringBuilder() As String
    Dim siteName As String
    Dim sb As StringBuilder = New StringBuilder

    Dim siteList As List(Of String) = New List(Of String)
    For row As Integer = 0 To dtSiteStats.Rows.Count - 1
        siteName = dtSiteStats.Rows(row).Item(1).ToString
        siteList.Add(siteName)
    Next

    sb.Append("[")
    For i As Integer = 0 To siteList.Count - 1
        siteName = siteList(i)
        sb.Append("""")
        sb.Append(siteName.ToString)
        If i < siteList.Count - 1 Then
            sb.Append(""",")
        Else
            sb.Append("""")
        End If
    Next
    sb.Append("]")

    Return sb.ToString
End Function

Public Function UpdateStatsType(ByVal statsType As Integer) As String
    Dim resultString As String = ""

    Select Case statsType
        Case 1
            resultString = GetParticipationRate()
        Case 2
            resultString = GetRefusalRate()
        Case 3
            resultString = GetNoAnswerRate()
        Case 4
            resultString = GetParticipationToOtherSitesRate()
        Case 5
            resultString = GetParticipationFromOtherSitesRate()
    End Select

    Return resultString
End Function

Public Function GetParticipationRate() As String
    Dim sb As StringBuilder = New StringBuilder
    sb.Append("[")
    For row As Integer = 0 To dtSiteStats.Rows.Count - 1
        Dim originalParticipants As Integer = CType(dtSiteStats.Rows(row).Item(3), Integer)
        Dim participantsFromOtherSite As Integer = CType(dtSiteStats.Rows(row).Item(5), Integer)
        Dim totalInvitationsSent As Integer = CType(dtSiteStats.Rows(row).Item(8), Integer)
        Dim participationRate As Integer = CInt(((originalParticipants + participantsFromOtherSite) / totalInvitationsSent) * 100)
        If row < dtSiteStats.Rows.Count - 1 Then
            sb.Append(participationRate)
            sb.Append(",")
        Else
            sb.Append(participationRate)
        End If
    Next
    sb.Append("]")

    Return sb.ToString
End Function
公共函数GetSitesListStringBuilder()作为字符串
将siteName设置为字符串
将某人调整为StringBuilder=新StringBuilder
Dim siteList作为列表(字符串的数量)=新列表(字符串的数量)
对于dtSiteStats.Rows.Count-1,行作为整数=0
siteName=dtSiteStats.Rows(row).Item(1).ToString
siteList.Add(站点名称)
下一个
某人附加(“[”)
对于i作为整数=0的站点列表。计数-1
siteName=站点列表(i)
某人加上(“”)
sb.Append(siteName.ToString)
如果我
任何帮助都将不胜感激。如果在我对我的问题的描述中有什么不清楚的地方,请让我知道,我会澄清的


谢谢

您是否尝试在这行数据上添加断点:并检查statsType的值??你可以添加后端功能吗?我在谷歌浏览器中使用了控制台,并确认statsType确实从下拉列表中获得了正确的值。还将后端代码添加到我的问题中!:)尝试用属性装饰您的方法,并使其成为静态(共享)方法。