Telerik MVC Chart ClientEvents.OnDataBinding

ber*_*dem 5 asp.net-mvc charts telerik

我想显示特定民意调查问题的民意调查结果.单击问题列表时,我想根据所选的questionId将我的图表与查询绑定.

所以我的计划是; 1.从选定的问题行中获取问题.没关系.

  1. 在我的图表上定义ClientEvents.OndataBinding事件.所以我可以通过questionId;

    function onChartDataBinding(e){e.data = $ .extend(e.data,{questionId:questionId}); }

  2. 使用$('#ChartPollResults').data('tChart').rebind();问题列表网格行选择事件.

当我根据第一个网格选定行进行第二次网格绑定时,此方案有效.但似乎图表控件上没有ClientEvents.OnDataBinding事件.rebind()图表控件不支持" "方法.

我使用的图表控制如下.

@(Html.Telerik().Chart<QuestionResult>()
                            .Theme("WebBlue")
                            .Name("ChartPollResults")
                            .Title("Poll Question Choice Number vs. Choice Count")
                            .Legend(legend => legend.Position(ChartLegendPosition.Bottom))
                            .Series(series =>
                            {
                                series.Bar("ChoseCount").Name("Choice Count").Gap(5);
                            })
                            .CategoryAxis(axis => axis.Categories(o => o.ChoiceNumber))

                            .DataBinding(dataBinding => dataBinding.Ajax().Select("_PollResultChartBinding", "Poll", new { questionId = 0 }))
                            .HtmlAttributes(new { style = "width: %100px; height: 270px" })
                    )
Run Code Online (Sandbox Code Playgroud)

我的Controller绑定方法;

public ActionResult _PollResultChartBinding(int questionId = 0)
{
            //questionId = 3;
            if (!ModelState.IsValid || questionId == 0)
                return Json(new List<QuestionResult>());

            PollQuestionDefinition pollQuestion = service.Get(questionId);
            List<PollAnswer> pollAnswers = service.GetPollAnswersByQuestion(questionId);
            PollQuestionResultUI result = new PollQuestionResultUI(pollQuestion, pollAnswers);

            return Json(result.Results);
}
Run Code Online (Sandbox Code Playgroud)

当我注释掉//questionId = 3;行时,我可以在图表中看到问题的结果,并且没有问题.

但是我无法将问题传递给图表.

提前致谢.

小智 1

首先,我立即注意到的一件事是您在 ActionResult 参数中将 QuestionId 设置为 0。我实际上只是修改了我已经启动并运行的图表以传递

new { questionID = 0}
Run Code Online (Sandbox Code Playgroud)

作为我的 Ajax select 语句的附加参数,它顺利通过。

至于传递参数,您可以考虑在网格选择上使用 POST 到服务器并以这种方式传递参数。我知道这可能并不理想,但理论上您可以填充该帖子中的图表,或者只是设置一个 ViewData 条目来包含您正在寻找的特定 QuestionID。

我还注意到您将其提交到Telerik 论坛,从那里的回复来看,上述方法实际上可能效果很好,或者您可以使用那里提到的方法(使用 ajax 调用的部分视图)。