jQuery GetJSON вызывается дважды для частичного просмотра ASP.NET MVC

У меня есть страница, содержащая html.RenderPartial, которая отображает частичное представление ASP.NET MVC.

Частичное представление используется как диалог jQuery и открывается со страницы, на которой оно отображается.

Проблема в том, что внутри частичного представления я хочу загрузить и сохранить переменную при отображении диалогового окна. Эти данные используются для поиска при работе внутри диалогового окна. Но когда загружается страница с частичным просмотром, jQuery getJson внутри частичного просмотра вызывается дважды. Почему?

Код внутри частичного представления выглядит так:

<script type="text/javascript">
$(function() {
    var groups = null;    

    $.getJSON("/RessourceGroup/List", null, function(data) {
        groups = data;
    });

В Firebug я вижу, что страница (представление) загружается один раз, но приведенный выше сценарий в частичном представлении по-прежнему вызывается дважды. Почему?


person Rasmus Christensen    schedule 08.07.2009    source источник


Ответы (1)


Похоже, он загрузится при загрузке страницы. Вы также перезагружаете партиал через AJAX, когда появляется диалоговое окно? Если это так, то он, вероятно, снова запустится.

РЕДАКТИРОВАТЬ: на основании вашего обновления я подозреваю, что тег скрипта находится внутри DIV и что DIV клонируется при вызове виджета диалога. Перемещение скрипта за пределы DIV, используемого диалоговым окном, должно решить вашу проблему.

person tvanfosson    schedule 08.07.2009
comment
Когда загружается страница Index.aspx, частичное представление test.ascx загружается через ‹div id = testDialog› ‹% Html.RenderPartial (test);%›. ‹/Div› У меня есть кнопка, чтобы открыть диалоговое окно, но простая загрузка index.aspx заставляет getJSON запускаться дважды. - person Rasmus Christensen; 09.07.2009
comment
Только что обнаружено, что $ (# Dialog) .dialog (.... вызывает второй вызов. Это означает, что один вызов для Html.RenderPartial и один вызов для .dialog, хмммммм - person Rasmus Christensen; 09.07.2009
comment
Скрипт внутри диалога DIV? Если да, переместите его наружу. Я не изучал это, но возможно, что виджет диалога создает клон DIV при его вызове. Перемещение сценария за пределы фактического DIV также должно избежать клонирования объекта сценария. - person tvanfosson; 09.07.2009