2011-08-22 75 views
4

我想顯示特定投票問題的投票結果。 當問題列表單擊時,我想根據選定的questionId將我的圖表與查詢綁定。Telerik MVC圖表ClientEvents.OnDataBinding

所以我的計劃是; 1.從選定的問題行中獲得questionId。沒關係。

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

我的控制器綁定方法;

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; i行可以看到在圖與沒有問題室內用ID = 3的問題的結果。

但我不能通過questionId圖表。

在此先感謝。

回答

1

首先,我立即注意到的一件事是,您在ActionResult參數中設置了questionId等於0。其實,我只是修改圖表我有啓動並運行

new { questionID = 0} 

傳遞作爲附加參數,以我的Ajax select語句,並在精細過去了。

至於傳遞參數,你可以考慮使用一個POST到服務器上的網格選擇,並通過參數的方式。我知道這裏可能不太理想,但理論上你可以在該帖子中填充圖表,或者只需設置一個ViewData條目以包含您正在查找的特定questionID。

我也注意到,您將此提交給Telerik forums,並從響應那裏看起來上述方法實際上可能工作得很好,或者您可以使用上面提到的方法(帶有ajax調用的局部視圖)。

1

這是我對你的源代碼的意見應該是這樣的:

//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"); 

爲Telerik的圖表AJAX綁定參考(不包括如何重新綁定圖表): http://demos.telerik.com/aspnet-mvc/chart/ajaxbinding