Telerik MVC Chart ClientEvents.OnDataBinding - PullRequest
       18

Telerik MVC Chart ClientEvents.OnDataBinding

5 голосов
/ 22 августа 2011

Я хочу показать результат опроса по конкретному вопросу опроса. Когда щелкнул список вопросов, я хочу связать свою диаграмму с запросом в соответствии с выбранным идентификатором вопроса.

Итак, мой план был; 1. получить вопрос от выбранной строки вопроса. все в порядке.

  1. определение события ClientEvents.OndataBinding на моем графике. Так что я бы смог передать вопрос с;

    функция onChartDataBinding (e) { e.data = $ .extend (e.data, {questionId: questionId}); }

  2. с использованием $('#ChartPollResults').data('tChart').rebind(); в строке списка вопросов выбранного события.

Этот сценарий работает, когда у меня есть вторая привязка сетки в соответствии с выбранной строкой первой сетки. Но, похоже, в элементе управления диаграммы событие ClientEvents.OnDataBinding отсутствует. И метод "rebind()" не поддерживается в элементе управления Chart.

Таблица управления, которую я использую, приведена ниже.

@(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" })
                    )

Метод привязки My 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);
}

Когда я закомментирую //questionId = 3; строку, я могу видеть результаты для вопроса с Id = 3 на графике без проблем.

Но я не могу передать вопрос в диаграмму.

Заранее спасибо.

Ответы [ 2 ]

2 голосов
/ 01 ноября 2012

Это мое мнение для вашего исходного кода должно быть следующим:

//controller binding method

    public ActionResult _PollResultChartBinding(string questionId)
    {
                //questionId = 3;
      int _questionId = String.IsNullOrEmpty(questionId) ? 0 : Convert.ToInt32(questionId);

                if (_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);
    }

**in your view, there is no problem with the code**.
but, for rebind that chart, this is the code :

example : (running from developer console for IE or firebug for firefox browser)

    var chartPollResult = $('#ChartPollResults').data('tChart');
    chartPollResult.rebind({ questionId: "0"});

but if you want make it into function, code should be like this:

    function rebindChartPollResult(e, param) { 
      e.data('tChart').rebind({ questionId: param});
    }

calling method :

    rebindChartPollResult($('#ChartPollResults'), "0");

ссылка для привязки ajax Telerik диаграммы (не входит, как перепривязать диаграмму): http://demos.telerik.com/aspnet-mvc/chart/ajaxbinding

1 голос
/ 26 августа 2011

Прежде всего, я сразу заметил, что в параметрах ActionResult вы задали значение questionId, равное 0.На самом деле я только что изменил Chart, который у меня был, и работал для передачи

new { questionID = 0}

в качестве дополнительного параметра к моему оператору выбора Ajax, и он прошел нормально.

Что касается передачи параметра, который выМожно рассмотреть возможность использования POST для сервера при выборе Grid и передать параметр таким образом.Я знаю, что это не может быть идеальным здесь, но теоретически вы можете либо заполнить диаграмму в этом посте, либо просто установить запись ViewData, которая будет содержать конкретный вопрос, который вы ищете.

Я также заметил, что вы отправилиэто на форумах Telerik и из полученного ответа может показаться, что вышеприведенный подход может действительно работать очень хорошо, или вы можете использовать упомянутый там подход (частичное представление с вызовами ajax).

...