我见过很多关于PartialViews和Javascript的问题:问题是需要Javascript的PartialView,例如:呈现jqGrid的视图:
部分视图需要<div id="myGrid"></div>
然后是一些脚本:
<script>
$(document).ready(function(){
$('#myGrid').jqGrid( { // config params go here
});
}
</script>
问题是如何在不使用内联标记和多个$(document).ready标记乱丢页面的情况下包含PartialView。
我们还希望将多个RenderPartial调用的结果分成一个document.Ready()调用。
最后我们遇到了Javascript库文件的问题,例如JQuery和JQGrid.js,理想情况下应该包含在页面的底部(就在$ .ready块之前),理想情况下只包含在相应的PartialViews时在页面上使用。
在搜索WWW时,似乎没有人解决过这个问题。可能的方法是实现自定义视图引擎。我想知道是否有人有任何我可能错过的替代建议?
答案 0 :(得分:2)
这是一个很好的问题,这是我的团队在JQuery首次发布时遇到的问题。一位同事写了一个页面基类,将所有文档就绪调用合二为一,但这完全是浪费时间和客户的钱。
没有必要将$(document).ready()调用合并为一个,因为它们将按照它们出现在页面上的顺序一个接一个地被调用。这是由于该方法的多播委托性质,它不会对性能产生重大影响。您可能会发现您的页面更易于维护,但可维护性很少是jQuery的问题,因为它具有如此简洁的语法。
你能否扩展想要将它们结合起来的原因?我发现很多开发人员都是完美主义者,他们希望他们的标记绝对完美。相反,我发现当它对客户来说足够好时,当它充分运行并且显示正确时,那么我的时间最好花在提供下一个要求上。在过去格式化HTML时我浪费了很多时间,没有人会看到它。
您希望显示在页面底部的任何脚本都应该在ClientScriptManager.RegisterStartupScript方法内部进行,因为它在页面底部呈现。
http://msdn.microsoft.com/en-us/library/z9h4dk8y.aspx
编辑刚刚注意到您的问题是针对ASP.NET MVC的。我的答案更多的是ASP.NET答案,但就渲染的html而言,我的大多数评论仍然相关。多个document.ready函数不是问题。
标准的jQuery方法是编写一个将向多个元素添加行为的脚本。因此,在要包含网格的div中添加一个类,并在每个div上调用一个函数:
<script language="text/javascript">
$(document).ready(function(){
$('.myGridClass').each(function(){
$(this).jqGrid( {
// config params can be determined from
//attributes added to the div element
var url = $(this).attr("data-url");
});
});
}
</script>
您只需在页面上以及您刚才拥有的部分视图中添加此脚本:
<div class="myGridClass" data-url="http://whatever-url-to-be-used"></div>
注意data-url属性。这是HTML5语法,它将无法通过HTML 4验证。它仍然可以在HTML 4浏览器中使用。只有你必须通过html验证器运行你的页面才有意义。我可以见到你already know about HTML5
答案 1 :(得分:0)
不是很漂亮,但就你的最后一点而言,你不能在返回部分的动作中将相应的标签作为ViewData字典发送吗?