GemBox останавливает работу остальной части внутреннего кода в модуле DNN

У нас есть модуль DNN, который будет получать прайс-лист из нашей системы ERP после того, как вы выберете формат, в который хотите его экспортировать. Мы используем GemBox для создания файла Excel, CSV или PDF, но проблема, которую мы осознали, заключается в том, что остальной код перестает работать, как только он начинает генерировать файл для загрузки. Это означает, что PostBack останавливается.

Мы используем последний раздел кода из GemBox, который не приведет к жесткому прерыванию потока: https://gemboxsoftware.deskpro.com/kb/articles/threadabortexception-in-asp-net-application

Мы убедились, что в DotNetNuke отключен частичный рендеринг.

Затем мы изменили внутренний код, чтобы получить отдельный файл .aspx (не файл .ascx), как только код запускается для создания файла Exel, CSV или PDF. Это предотвращает прекращение работы PostBack. Теперь будет создан файл загрузки, но я пытаюсь отключить отображение значка загрузки. Я использовал RegisterStartupScript, который переходит к функции JQuery, чтобы остановить его, но он никогда не запускает этот RegisterStartupScript, даже если в отдельном файле, код которого включен в раздел PageLoad, и код проходит через него при отладке. (Означает ли это, что вы не можете загружать отдельные страницы в модуль DNN, кроме файла view.ascx?)

Похоже, что Front-End никогда не обновляется после загрузки этого файла загрузки. Может быть, это ответ HTTP-заголовка, который нарушает остальной код?

Как я могу сбросить / перезагрузить страницу модуля DNN без перезагрузки всей веб-страницы?

Означает ли это, что мне придется написать функцию Ajax с какой-нибудь функцией Web Worker? Я просто хотел бы перезагрузить модуль DNN, как только в браузере появится файл загрузки.


person Tig7r    schedule 22.05.2018    source источник
comment
Это не зависит от DNN, но сервер может отправить клиенту только один запрос. Это либо загружаемый файл, либо обновленная html-страница, но не то и другое вместе. Я не знаю модуль gembox, но если вы хотите обновить пользовательский интерфейс после загрузки, вам понадобится решение jquery / ajax.   -  person VDWWD    schedule 22.05.2018


Ответы (1)


Когда вы создаете файл и отвечаете пользователю с этим файлом для загрузки. Браузер не может обрабатывать никакие другие действия или ответы, такие как сценарий запуска регистрации или иным образом. НО вы можете отправить обратно cookie.

Таким образом, один из способов справиться с этим - запустить некоторый клиентский код, когда он щелкнет, чтобы загрузить и показать ваш индикатор прогресса, а затем проверить наличие или отсутствие файла cookie в зависимости от того, как вы его реализуете. Когда это изменится, вы можете скрыть прогресс.

Решение немного сложное, но в этом ответе очень подробно рассказывается, как это сделать:

person Mitchel Sellers    schedule 23.05.2018