2011-10-03 73 views
1

希望有人可以帮助我这.....我正在构建一个MVC3项目,我似乎无法弄清楚为什么我的部分视图不能执行任何内嵌的JavaScript函数。这里是组成的例子,但希望显示我想要实现的校长......MVC3在部分视图中渲染脚本

我有一个视图项目列表,称为项目。

foreach (var item in Model.SaleItems) 
{ 
    <div>@Html.ActionLink((string)item.ID, "Item", new { ID = @item.ID })</div> 
} 

如果用户点击其中一个项目,他们将被发送到一个页面,其中包含有关所选项目的详细信息。在这个页面上,有一个菜单会有3个选择;细节,评论,图像(每个都是局部视图)。如果用户从菜单中选择详细信息选项,则细节部分将显示来自web服务的几个图表,如Google可视化API。

这是我用一个脚本局部视图加载图表:

<div> 
    <h4>Details</h4> 
    <div id= "detailsContainer"></div> 
</div> 


<script type="text/javascript"> 
    $(document).ready(function() { 
    google.load('visualization', '1', { packages: ['table'] }); 
    google.setOnLoadCallback(drawDetailsTable); 
    }); 
    function drawDetailsTable() { 
     var data = new google.visualization.DataTable(); 
     data.addColumn('string', ''); 
     data.addColumn('string', ''); 
     data.addRows(4); 
     data.setCell(0, 0, 'Color'); 
    data.setCell(0, 1, '<b>@Model.Color</b>'); 
    data.setCell(1, 0, 'Size'); 
    data.setCell(1, 1, '<b>@Model.Size</b>'); 
    data.setCell(2, 0, 'Weight'); 
    data.setCell(2, 1, '<b>@Model.Weight</b>'); 
    data.setCell(3, 0, 'Material'); 
    data.setCell(3, 1, '<b>@Model.MainMaterial</b>'); 
    var table = new google.visualization.Table(document.getElementById('detailsContainer')); 
    var options = { allowHtml: true }; 
    table.draw(data, options); 
} 

</script> 

任何人有任何想法为什么不起作用?如果我将脚本从局部视图移动到视图,并在主视图的ActionResult中静态声明一个项目,它将起作用,但除此之外它不起作用。

在此先感谢!

+0

确定javascript没有被调用?你有没有尝试过调试它,并设置一个断点,看它是否在javascript处于部分时被命中? – shuniar

+0

如果您将脚本放在承载partialview的页面中,它应该可以工作。这是真的吗?如果没有(从萤火虫错误)会怎么样? – Iridio

+0

@shuniar - 是的,我试过警报和断点,我也尝试添加另一个脚本来调用脚本,没有运气! –

回答

0

我终于明白了。 Shuniar是正确的,脚本应该在部分视图中执行,但问题在于Google地图和可视化API。部分视图将呈现,但是该脚本中永远不会调用该函数。这是有道理的,因为没有用于部分视图的onLoad。

google.setOnLoadCallback(drawDetailsTable); 
function drawDetailsTable() { 
.... 
    }); 

为了解决这个问题,我只是改变了它显式调用功能部分被渲染。

google.setOnLoadCallback(drawDetailsTable); 
    drawDetailsTable();   
    function drawDetailsTable() { 
.... 
    });  
+0

我想你也可能会发现它取决于浏览器和版本。我知道IE8和更低版本不会执行插入到dom中的脚本块。 –