2010-12-29 3 views
1

У меня есть вид загрузки PartialView через jQuery. PartialView имеет ViewData, к которому должен обращаться JQuery, но я не могу получить его от jQuery. Приведенный ниже код использует плагин HighChart JQuery (и это только тестовый код взят из примера страницы HighChart):Как я могу получить доступ к ViewData в PartialView из jQuery в MVC?

<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 ...

ответ

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(); 
+0

Спасибо, что работали в столько, сколько я могу теперь получить данные в JQuery. Тем не менее, оказывается, что делать это, как будто это не дает мне данные в правильной форме, видимо. Моя идея состояла в том, чтобы создать строку в контроллере (в основном ViewData [«Сотрудники»] = «« Joe »,« Jane », но созданная в цикле) и передать ее в представление. Но это только набрало мне странную строку на диаграмме ... Итак, как мне получить данные в параметре highchart в правильной форме? (категории: ['Джейн', 'Джо'])? – Anders

+0

не уверен, я не знаю много о плагине с высокой четкости. но похоже, что вам нужно сериализовать данные в JSON. – RPM1984

+0

Хорошо, спасибо. Я попробую отдельный пост об этом. – Anders

Смежные вопросы