ASP.NET MVC View ReRenders Часть себя - PullRequest
2 голосов
/ 09 апреля 2010

За все мои годы программирования на .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, title: «Создать новое объявление», положение: ['центр', 35], закрыть: AdEditor.reset });

Ответы [ 3 ]

2 голосов
/ 09 апреля 2010

Как я и подозревал в моем первоначальном вопросе, проблема связана с методом dialog() в jQueryUI. После рендеринга страницы, элемент, назначенный в качестве диалогового окна, будет перерисован заново, что означает повторный запуск любого Javascript, содержащегося или загруженного в этом элементе. В моем случае у меня было два частичных представления, которые имели свои собственные файлы JS.

Я написал самый уродливый хак, чтобы обойти его, но я заработал, создав глобальную переменную и проверив ее перед вызовом чего-либо в $(function()). Я умер, немного написав этот хак, но, черт возьми, теперь мы можем отправить!

Спасибо всем, кто пытался помочь!

1 голос
/ 09 апреля 2010

Проверьте JavaScript, чтобы убедиться, что никакие запросы случайно не возвращаются на тот же контроллер. Используйте Firebug или Fiddler для просмотра HTTP-запросов.

0 голосов
/ 09 апреля 2010

Я могу быть Вааааи вне базы, но вы завернули свой сценарий в $ (document) .ready ()?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...