我试图调用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
任何帮助都会非常感激。如果我的问题描述中的内容不明确,请告诉我并澄清一下!
谢谢!