返回包含javascript的部分视图是不好的做法吗?

我正在实现一个客户数据库,它允许我使用ASP.NET MVC和javascript(jQuery)搜索用户和公司,浏览和编辑他们的详细信息以及许多其他内容。

无论何时发生post或get,我都是通过jQuery.load实现的,并将PartialView插入DOM。

一些部分视图包括表单。 我希望那些也是ajax表单,因此这些partialviews具有document.ready处理程序,可以将表单转换为ajax表单(通过jquery.form)。

一开始我在回调/代码中处理这个问题,将部分视图插入到DOM中。 但是,这导致了一个包含大量javascript函数的大脚本,这些函数引用了不同的页面。 我通过将脚本插入相应的页面来重构大javascript。

现在代码更加流畅(我的OnXXXPartialView处理程序更少),代码整齐地位于它所属的局部视图中。 大多数这些文件只包含3-4行javascript代码,因此开销并不是很重要。

因此,我不仅有效地向文档DOM添加元素,而且有时我还添加了一段javascript。 在实践中,这很好,但似乎Firebug无法调试动态加载的脚本 。

Firebug问题有一些可行的解决方法,但我想知道我的架构是否真的是这里的罪魁祸首。 你在哪里放置属于部分视图的javascript? 有没有最好的做法?

如果你在部分视图中经历了包含javascript的麻烦,我会切换到只在你的ajax调用中返回JSON,这样你就可以在客户端上处理它了。 虽然,我承认我总是喜欢这种方法。

至于最佳实践,我一直认为在ajax调用而不是json中返回生成的html是不好的,但那只是我(不是敲你,这是个人选择)。 很显然,微软并不认为这是一种不好的做法,因为他们专门建立了支持它的function。 无论如何,我不会考虑在你的html中包含javascript,而不仅仅是首先发送html。

我很好奇,javascript中有什么?

编辑:具体来说,我赞成做一个ajax调用来获取json,然后使用客户端JS构建那个“局部视图”并将其插入到dom中。 而不是进行ajax调用以获取服务器为客户端呈现的html然后插入到dom中。

一些部分视图包括表单。 我希望那些也是ajax表单,因此这些partialviews具有document.ready处理程序,可以将表单转换为ajax表单(通过jquery.form)。

我认为您可以在将部分视图插入dom的回调/代码中处理此问题。

编辑:如果它有序,高效,组织良好,适合你,那么我会坚持下去。 将所有内容整合到一个部分视图中的想法绝对具有吸引力,因此我不会过于担心违反任何最佳实践。 我唯一担心的是JS可能是可重用的,如果你一遍又一遍地插入相同的脚本就是这种情况。 但是在这种情况下,听起来你有很多分区,所以我坚持使用它,除非你可以概括你的脚本并将它们包含在你的其他JS中。

最后 – JavaScript应该在一个文件中(因为每个http GET花费一些宝贵的时间)并且缩小。 这些链接可能会让您感兴趣: 这里和这里 。

处理JS的方式会产生一些不需要的数据传输 – 而不是发送JS,使其静态,在客户端缓存它并进行参数化。

上面的post提供了一个很好的提示(JSON)如何参数化你的JS 🙂