ASP.NET MVC查看ReRenders本身的一部分

时间:2010-04-09 01:45:21

标签: jquery asp.net-mvc jquery-ui

在我多年的.NET编程中,我没有碰到像这一个奇怪的错误。我发现了这个问题,因为页面上的一些元素被jQuery双重约束。经过一些(荒谬的)调试后,我终于发现,一旦视图完全完成渲染本身及其所有子视图的部分视图,它就会回到任意但一致的位置并重新渲染。

我现在已经把头发拉了两天,我只是不能让它自己呈现一次!

由于缺乏更好的调试思路,我在整个HTML中精心添加了日志记录器,因此我可以确定可能导致此问题的原因。例如,此代码($log只记录到控制台):

...
<script type="text/javascript">var x = 0; $log('1');</script>
<div id="new-ad-form">
<script type="text/javascript">x++;$log('1.5', x);</script>
...

将产生

... <--- this happens before this snippet
1  
1.5 1 
...
10 <--- bottom of my form, after snippet
1.5 2 <--- beginning of part that runs again!
...
9 <--- this happens after this snippet

我已经搜索了我的代码库的高低,但没有说它应该重新渲染页面的一部分。我想知道jQueryUI是否与它有关,因为#new-ad-form是jQueryUI对话框的容器。

如果可能的话,这是我的初始代码:

$('#new-ad-form').dialog({

autoOpen:false,   莫代尔:是的,   宽度:470,   标题:'制作新广告',   职位:['中心',35],   关闭:AdEditor.reset  });

3 个答案:

答案 0 :(得分:2)

正如我在原始问题中所怀疑的那样,问题在于jQueryUI的dialog()方法。页面呈现后,分配为对话框的元素将被重新呈现,这意味着重新运行该元素中包含或加载的任何Javascript。在我的例子中,我有两个部分视图,它们有自己的JS文件。

我编写了最丑陋的黑客来解决它,但我通过创建一个全局变量并在调用$(function())中的任何内容之前检查它来实现它。我死了一点写这个黑客,但是哎呀,现在我们可以发货了!

感谢所有试图提供帮助的人!

答案 1 :(得分:1)

检查JavaScript以确保没有意外地将请求返回到同一个控制器。使用Firebug或Fiddler来监视HTTP请求。

答案 2 :(得分:0)

我可能会在这里离开Waaaay但是你把你的脚本包装在$(document).ready()中吗?