PartialView不会使用ViewBags值在屏幕上渲染

时间:2013-05-29 14:12:54

标签: asp.net-mvc-3

我有一个带有两个动作的控制器和一个带有两个图表的视图,第一个直接在视图上,第二个是部分视图,如下所示:

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

任何人都知道为什么结果没有在我的第二张图表上呈现?

谢谢!

1 个答案:

答案 0 :(得分:2)

  

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

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

所以继续,订阅并使用控制器返回的结果更新你的部分:

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

请注意,我使用了$('#childChart')选择器,因为您有2个class="chart"元素,据我所知,您只想更新第二个元素。因此,请确保为包含div分配唯一ID:

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