在我多年的 .NET 编程生涯中,我还没有遇到过像这个这样奇怪的错误。我发现这个问题是因为页面上的某些元素被 jQuery 双重绑定(bind)。经过一些(荒谬的)调试后,我终于发现,一旦 View 完全完成了自身及其所有子部分 View 的渲染,它就会返回到任意但一致的位置并重新渲染自身。
我已经为这个问题绞尽脑汁两天了,但我根本无法让它只渲染一次!
由于缺乏更好的调试思路,我煞费苦心地在整个 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({
自动打开:假, 模态:真实, 宽度:470, title: '制作新广告', 位置:['中心',35], 关闭:AdEditor.reset });
最佳答案
正如我在最初的问题中所怀疑的那样,问题出在 jQueryUI 的 dialog()
方法上。页面呈现后,指定为对话框的元素将重新呈现,这意味着该元素中包含或加载的任何 Javascript 都会重新运行。就我而言,我有两个部分 View ,它们有自己的 JS 文件。
我编写了最丑陋的黑客来解决它,但我通过创建一个全局变量并在调用 $(function())
中的任何内容之前检查它来使其工作。我写那个 hack 的时候有点死了,但是哎呀,现在我们可以发货了!
感谢所有试图提供帮助的人!
关于jquery - ASP.NET MVC View 重新渲染其自身的一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2604598/