如何从MVC中的jQuery访问部分视图中的ViewData?

时间:2010-12-29 01:02:24

标签: asp.net jquery asp.net-mvc-2 partial-views

我有一个View通过jQuery加载PartialView。 PartialView具有jQuery需要访问的ViewData,但我似乎无法从jQuery中获取它。下面的代码使用HighChart jQuery插件(它只是从HighChart示例页面获取的测试代码):

<script type="text/javascript">
        var chart1; // globally available
        $(document).ready(function () {
            $('#reportButton').click(function (event) {
                var actionUrl = '<%= Url.Action("UserReport") %>';
                var customerId = $('#customersId').val();
                var month = $('#monthsId').val();
                var employees = '<%= ViewData["Employees"] %>'
                alert(employees);
                $.get(actionUrl, { customerId: customerId, month: month }, function (data) {
                    $('#result').html(data);
                    getHighChart();
                });
            });
        });

        function getHighChart() {
            var employees = '<%= ViewData["Employees"] %>'
            alert(employees);
            chart1 = new Highcharts.Chart({
                chart: {
                    renderTo: 'chart-container-1',
                    defaultSeriesType: 'bar'
                },
                title: {
                    text: 'Fruit Consumption'
                },
                xAxis: {
                    categories: [employees]
                },
                yAxis: {
                    title: {
                        text: 'Fruit eaten'
                    }
                },
                series: [{
                    name: 'Jane',
                    data: [1, 0, 4]
                }, {
                    name: 'John',
                    data: [5, 7, 3]
                }]
            });
        }


    </script>

这个jQuery在主视图中,因为我不知道如何使用文档就绪函数将它放在PartialView中。但是通过在get()函数的回调中调用HighChart函数,它可以在局部视图中工作。但是访问ViewData不会......

我怎样才能做到这一点?我需要从PartialView操作方法获取数据,以便填充HighChart数据......

1 个答案:

答案 0 :(得分:2)

问题在于ASP.NET在呈现时遍历HTML文档的方式。

即使您在$.get通话结束后执行了此代码:

var employees = '<%= ViewData["Employees"] %>'

ViewData属性将被评估渲染时间(例如在执行此代码之前)。

我的建议:

在部分视图中声明隐藏字段,并将ViewData放在其中:

<input type="hidden" id ="Employees_ViewData" value="<%: ViewData["Employees"] %>" />

在呈现局部视图时,将对其进行评估。

然后你可以通过jQuery访问它:

var employees = $('#Employees_ViewData').val();