从客户端调用后端函数,并使用参数填充chart.js图(vb.net,jQuery)

时间:2015-07-03 12:15:53

标签: javascript jquery asp.net vb.net charts

我试图调用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>

后端代码:

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

任何帮助都会非常感激。如果我的问题描述中的内容不明确,请告诉我并澄清一下!

谢谢!

0 个答案:

没有答案