2013-05-29 74 views
1

我有两个操作的控制器,并与两个图表的图,第一个是直接在查看和第二个是一个局部视图,如以下:PartialView开不渲染与ViewBags屏幕值

<div class="chart" style="margin-top: 10px;"> 
     @(Html.Telerik().Chart(Model) 
      .Name("CustomerCount") 
      .Title(title => title.Text("TotalCustomersPerHour")) 
      .Legend(settings => settings.Position(ChartLegendPosition.Bottom)) 
      .Series(series => series.Line(p => p.CustomerCount.Total).Name("TotalCustomersPerHour")) 
      .CategoryAxis(a => a.Categories(p => p.CustomerCount.Intervalo).Labels(l => l.Rotation(-40))).Theme("vista") 
      .Tooltip(true) 
      .HtmlAttributes(new { style = "height: 300px;" }) 
      .DataBinding(dataBinding => dataBinding.Ajax() 
      .Select("CustomerCountData", "Indicators", new 
      { 
       storeId = "TR_001", 
       startDate = DateTime.Today, 
       endDate = DateTime.Today.AddDays(10) 
      })) 
      .ClientEvents(b => b.OnDataBound("OnCustomerCountDataBound")) 
     ) 
</div> 
<div class="chart" style="margin-top: 10px;"> 
     @Html.Partial("_ChartTest") 
</div> 

第一个Action被一个Telerik Chart Ajax调用调用,当它完成后,我通过OnDataBound事件调用另一个Action,以便使用ViewBags填充我的部分视图图表。

function OnCustomerCountDataBound(e) { 
    $.ajax({ 
     type: "POST", 
     url: "Indicators/ChartTest", 
     data: { retailStoreId: "TR_001"}, 
    }); 
} 

我调试的局部视图,我可以得到ViewBag值,但结果不会显示在页面上。

@(Html.Telerik().Chart() 
    .Name("TimeOfPermanency") 
    .Title(title => title.Text(TrackerMessages.TimeOfPermanencyPerArea)) 
    .Legend(settings => settings.Position(ChartLegendPosition.Bottom)) 
    .Series(series => 
     { 
      if (ViewBag.Series != null) 
      { 
       foreach (var area in ViewBag.Series) 
       { 
        series.Column(area.Data).Name(area.Name); 
       } 
      } 

     }) 
    .CategoryAxis(axis => 
    { 
     if (ViewBag.Categories != null) 
     { 
      axis.Categories(ViewBag.Categories); 
     } 
    }) 
    .Tooltip(true) 
    .HtmlAttributes(new { style = "height: 300px;" }) 
    .ClientEvents(b => b.OnDataBound("OnTimeOfPermanency")) 
) 

任何人都知道为什么结果不是使我的第二个图表上?

谢谢!

回答

2

我调试了部分视图,我可以得到ViewBag值,但 结果没有显示在页面上。

这是因为您似乎没有在您的ajax调用的成功回调中做任何事情。你甚至没有订阅它。

因此,继续前进,订阅它,并通过控制器返回的结果更新部分:

function OnCustomerCountDataBound(e) { 
    $.ajax({ 
     type: "POST", 
     url: "Indicators/ChartTest", 
     data: { retailStoreId: "TR_001"}, 
     success: function(result) { 
      $('#childChart').html(result); 
     } 
    }); 
} 

注意,因为你有2个元素class="chart"和从我的理解,我已经使用了$('#childChart')选择你只想更新第二个。因此,请确保您分配一个唯一的ID,以包含div:

<div class="chart" id="childChart" style="margin-top: 10px;"> 
    @Html.Partial("_ChartTest") 
</div> 
+0

我没有,因为我不上这个AJAX调用返回没有一个结果,我只是调用填充ViewBags的动作来呈现在我的系列和Telerik Chart的类别部分,如我在上面的代码中所示。 – felipekm

+1

您使用AJAX调用('Indicators/ChartTest')触发的控制器操作必须返回_ChartTest局部视图,并填充ViewBag数据,因为此部分依赖于该数据。在您的AJAX调用的成功回调中,如果您希望显示此图表,您应该刷新DOM的相应部分。 –

+0

男人,像魅力一样工作。 你只是摇滚!我就知道!谢谢! – felipekm