Как я могу получить доступ к ViewData в PartialView из jQuery в MVC? - PullRequest
1 голос
/ 29 декабря 2010

У меня есть View, загружающий PartialView через jQuery. PartialView имеет ViewData, к которому должен получить доступ jQuery, но я не могу получить доступ к нему из 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 с функцией готовности документа. Но, помещая вызов функции HighChart в функцию обратного вызова функции get (), она работает в частичном представлении. Но доступ к ViewData не ...

Как мне этого добиться? Мне нужно получить данные из метода действия PartialView, чтобы заполнить данные HighChart ...

1 Ответ

2 голосов
/ 29 декабря 2010

Проблема в том, что 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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...