我有一个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数据......
答案 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();